From: Toni Wilen Date: Fri, 26 Dec 2008 14:26:26 +0000 (+0200) Subject: imported winuaesrc1540b5.zip X-Git-Tag: 2100~107 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=a4e2f0eee57176a703fae1088b809efed7b83442;p=francis%2Fwinuae.git imported winuaesrc1540b5.zip --- diff --git a/akiko.c b/akiko.c index c85a98cf..fc6971cd 100755 --- a/akiko.c +++ b/akiko.c @@ -32,8 +32,14 @@ #define AKIKO_DEBUG_IO 0 #define AKIKO_DEBUG_IO_CMD 0 -static void irq(void) +// 43 48 49 4E 4F 4E 20 20 4F 2D 36 35 38 2D 32 20 32 34 +#define FIRMWAREVERSION "CHINON O-658-2 24" + +static void irq (void) { +#if AKIKO_DEBUG_IO > 1 + write_log ("Akiko Interrupt\n"); +#endif if (!(intreq & 8)) { INTREQ_0 (0x8000 | 0x0008); } @@ -389,8 +395,8 @@ static int cdrom_checksum_error; 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 int cdrom_led; static uae_u8 *sector_buffer_1, *sector_buffer_2; static int sector_buffer_sector_1, sector_buffer_sector_2; @@ -407,7 +413,7 @@ static void checkint (void) irq (); } -static void set_status(uae_u32 status) +static void set_status (uae_u32 status) { cdrom_status1 |= status; checkint (); @@ -698,14 +704,21 @@ static void cdrom_return_data (int len) write_log ("%02X\n", checksum); #endif cdrom_result_complete += len + 1; - set_status(CDSTATUS_DATA_AVAILABLE); + set_status (CDSTATUS_DATA_AVAILABLE); } -static int cdrom_command_something (void) +static int cdrom_command_led (void) { int v = cdrom_command_buffer[1]; - if (v & 0x80) - return 1; + int old = cdrom_led; + cdrom_led = v & 1; + if (cdrom_led != old) + gui_cd_led (0, cdrom_led ? 1 : -1); + if (v & 0x80) { + cdrom_result_buffer[0] = cdrom_command; + cdrom_result_buffer[1] = cdrom_led; + return 2; + } return 0; } @@ -716,18 +729,15 @@ static int cdrom_command_media_status (void) return 2; } -/* check if cd drive door is open or closed */ -static int cdrom_command_door_status (void) +/* check if cd drive door is open or closed, return firmware info */ +static int cdrom_command_status (void) { - if (unitnum >= 0 && !sys_command_ismedia (DF_IOCTL, unitnum, 0)) { - cdrom_result_buffer[1] = 0x80; - cdrom_disk = 0; - } else { - cdrom_result_buffer[1] = 1; - cdrom_disk = 1; - } + cdrom_result_buffer[1] = 0x01; + //cdrom_result_buffer[1] = 0x80; door open if (unitnum >= 0) cdrom_toc (); + /* firmware info */ + strcpy (cdrom_result_buffer + 2, FIRMWAREVERSION); cdrom_result_buffer[0] = cdrom_command; return 20; } @@ -744,15 +754,25 @@ static int cdrom_return_toc_entry (void) memcpy (cdrom_result_buffer + 2, cdrom_toc_buffer + cdrom_toc_counter * 13, 13); cdrom_toc_counter++; if (cdrom_toc_counter >= cdrom_toc_entries) - cdrom_toc_counter = 0; + cdrom_toc_counter = -1; return 15; } +static int checkerr (void) +{ + if (!cdrom_disk) { + cdrom_result_buffer[1] = CH_ERR_NODISK; + return 1; + } + return 0; +} /* pause CD audio */ static int cdrom_command_pause (void) { cdrom_toc_counter = -1; cdrom_result_buffer[0] = cdrom_command; + if (checkerr ()) + return 2; cdrom_result_buffer[1] = cdrom_playing ? CDS_PLAYING : 0; if (!cdrom_playing) return 2; @@ -768,6 +788,8 @@ static int cdrom_command_pause (void) static int cdrom_command_unpause (void) { cdrom_result_buffer[0] = cdrom_command; + if (checkerr ()) + return 2; cdrom_result_buffer[1] = cdrom_playing ? CDS_PLAYING : 0; if (!cdrom_paused) return 2; @@ -790,7 +812,7 @@ static int cdrom_command_multi (void) cdrom_result_buffer[0] = cdrom_command; cdrom_result_buffer[1] = 0; if (!cdrom_disk) { - cdrom_result_buffer[1] |= CDS_ERROR; + cdrom_result_buffer[1] = 1; // no disk return 2; } @@ -906,14 +928,13 @@ static void cdrom_run_command_run (void) len = cdrom_command_multi (); break; case 5: - cdrom_dosomething = 1; - len = cdrom_command_something (); + len = cdrom_command_led (); break; case 6: len = cdrom_command_subq (); break; case 7: - len = cdrom_command_door_status (); + len = cdrom_command_status (); break; default: len = 0; @@ -985,7 +1006,7 @@ static void akiko_handler (void) if (unitnum < 0) return; if (cdrom_result_complete > cdrom_result_last_pos && cdrom_result_complete - cdrom_result_last_pos < 100) { - set_status(CDSTATUS_DATA_AVAILABLE); + //set_status (CDSTATUS_DATA_AVAILABLE); return; } if (cdrom_result_last_pos < cdrom_result_complete) @@ -1007,9 +1028,8 @@ static void akiko_handler (void) return; } } - if (cdrom_toc_counter >= 0 && !cdrom_command_active && cdrom_dosomething) { + if (cdrom_toc_counter >= 0 && !cdrom_command_active) { cdrom_return_data (cdrom_return_toc_entry ()); - cdrom_dosomething--; return; } } @@ -1066,7 +1086,7 @@ void AKIKO_hsync_handler (void) framecounter--; if (framecounter <= 0) { - if (cdrom_playing || cdrom_toc_counter > 0) + if (cdrom_led) gui_cd_led (0, 1); cdrom_run_read (); framecounter = 1000000 / (74 * 75 * cdrom_speed); @@ -1511,6 +1531,7 @@ void akiko_reset (void) cdrom_current_sector = -1; cdrom_command_offset_complete = 0; cdrom_command_offset_todo = 0; + cdrom_led = 0; if (akiko_thread_running > 0) { akiko_thread_running = 0; diff --git a/archivers/dms/pfile.c b/archivers/dms/pfile.c index d1bf43b3..f8e7d111 100755 --- a/archivers/dms/pfile.c +++ b/archivers/dms/pfile.c @@ -35,8 +35,8 @@ -static USHORT Process_Track(struct zfile *, struct zfile *, UCHAR *, UCHAR *, USHORT, USHORT, USHORT); -static USHORT Unpack_Track(UCHAR *, UCHAR *, USHORT, USHORT, UCHAR, UCHAR, USHORT, USHORT, USHORT); +static USHORT Process_Track(struct zfile *, struct zfile *, UCHAR *, UCHAR *, USHORT, USHORT, int); +static USHORT Unpack_Track(UCHAR *, UCHAR *, USHORT, USHORT, UCHAR, UCHAR, USHORT, USHORT, USHORT, int); static void printbandiz(UCHAR *, USHORT); static int passfound, passretries; @@ -209,9 +209,9 @@ USHORT DMS_Process_File(struct zfile *fi, struct zfile *fo, USHORT cmd, USHORT o if (cmd != CMD_VIEW) { if (cmd == CMD_SHOWBANNER) /* Banner is in the first track */ - ret = Process_Track(fi,NULL,b1,b2,cmd,opt,(geninfo & 2)?pwd:0); + ret = Process_Track(fi,NULL,b1,b2,cmd,opt,(geninfo & 2)); else { - while ( (ret=Process_Track(fi,fo,b1,b2,cmd,opt,(geninfo & 2)?pwd:0)) == NO_PROBLEM ) ; + while ( (ret=Process_Track(fi,fo,b1,b2,cmd,opt,(geninfo & 2))) == NO_PROBLEM ) ; } } @@ -236,7 +236,7 @@ USHORT DMS_Process_File(struct zfile *fi, struct zfile *fo, USHORT cmd, USHORT o -static USHORT Process_Track(struct zfile *fi, struct zfile *fo, UCHAR *b1, UCHAR *b2, USHORT cmd, USHORT opt, USHORT pwd){ +static USHORT Process_Track(struct zfile *fi, struct zfile *fo, UCHAR *b1, UCHAR *b2, USHORT cmd, USHORT opt, int enc){ USHORT hcrc, dcrc, usum, number, pklen1, pklen2, unpklen, l; UCHAR cmode, flags; int crcerr = 0; @@ -298,7 +298,7 @@ static USHORT Process_Track(struct zfile *fi, struct zfile *fo, UCHAR *b1, UCHAR if ((cmd == CMD_UNPACK) && (number<80) && (unpklen>2048)) { memset(b2, 0, unpklen); if (!crcerr) - Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum); + Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, enc); if (zfile_fwrite(b2,1,(size_t)unpklen,fo) != unpklen) return ERR_CANTWRITE; } @@ -306,12 +306,12 @@ static USHORT Process_Track(struct zfile *fi, struct zfile *fo, UCHAR *b1, UCHAR return NO_PROBLEM; if ((cmd == CMD_SHOWBANNER) && (number == 0xffff)){ - Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum); + Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, enc); printbandiz(b2,unpklen); } if ((cmd == CMD_SHOWDIZ) && (number == 80)) { - Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum); + Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, enc); printbandiz(b2,unpklen); } @@ -386,7 +386,7 @@ static void dms_decrypt(UCHAR *p, USHORT len, UCHAR *src){ } } -static USHORT Unpack_Track(UCHAR *b1, UCHAR *b2, USHORT pklen2, USHORT unpklen, UCHAR cmode, UCHAR flags, USHORT number, USHORT pklen1, USHORT usum1) +static USHORT Unpack_Track(UCHAR *b1, UCHAR *b2, USHORT pklen2, USHORT unpklen, UCHAR cmode, UCHAR flags, USHORT number, USHORT pklen1, USHORT usum1, int enc) { USHORT r, err = NO_PROBLEM; static USHORT pass; @@ -426,7 +426,7 @@ static USHORT Unpack_Track(UCHAR *b1, UCHAR *b2, USHORT pklen2, USHORT unpklen, break; } } - if (number == 80) { + if (number == 80 || !enc) { err = ERR_CSUM; break; } diff --git a/blitter.c b/blitter.c index 0cf1d5cd..50c22513 100755 --- a/blitter.c +++ b/blitter.c @@ -531,7 +531,7 @@ static void blitter_line (void) if (blitsing && blitonedot) blitahold = 0; blitonedot++; - blt_info.bltddat = blit_func(blitahold, blitbhold, blitchold, bltcon0 & 0xFF); + blt_info.bltddat = blit_func (blitahold, blitbhold, blitchold, bltcon0 & 0xFF); } static void blitter_line_proc (void) @@ -541,14 +541,14 @@ static void blitter_line_proc (void) bltapt += (uae_s16)blt_info.bltamod; if (bltcon1 & 0x10) { if (bltcon1 & 0x8) - blitter_line_decy(); + blitter_line_decy (); else - blitter_line_incy(); + blitter_line_incy (); } else { if (bltcon1 & 0x8) - blitter_line_decx(); + blitter_line_decx (); else - blitter_line_incx(); + blitter_line_incx (); } } else { if (bltcon0 & 0x800) @@ -556,14 +556,14 @@ static void blitter_line_proc (void) } if (bltcon1 & 0x10) { if (bltcon1 & 0x4) - blitter_line_decx(); + blitter_line_decx (); else - blitter_line_incx(); + blitter_line_incx (); } else { if (bltcon1 & 0x4) - blitter_line_decy(); + blitter_line_decy (); else - blitter_line_incy(); + blitter_line_incy (); } blitsign = 0 > (uae_s16)bltapt; bltstate = BLT_write; @@ -586,9 +586,8 @@ static int blitter_vcounter1, blitter_vcounter2; static void decide_blitter_line (int hpos) { - hpos++; if (dmaen (DMA_BLITTER)) { - while (blit_last_hpos < hpos) { + while (blit_last_hpos <= hpos) { int c = blit_cyclecounter % 4; for (;;) { if (c == 1 || c == 3) { @@ -597,7 +596,7 @@ static void decide_blitter_line (int hpos) blit_cyclecounter++; if (blt_info.vblitsize == 0) { bltdpt = bltcpt; - blitter_done(); + blitter_done (); return; } break; @@ -607,22 +606,22 @@ static void decide_blitter_line (int hpos) } blit_cyclecounter++; if (c == 1) { - blitter_read(); + blitter_read (); alloc_cycle_ext (blit_last_hpos, CYCLE_BLITTER); } else if (c == 2) { if (ddat1use) { bltdpt = bltcpt; } ddat1use = 1; - blitter_line(); - blitter_line_proc(); - blitter_nxline(); + blitter_line (); + blitter_line_proc (); + blitter_nxline (); } else if (c == 3) { - blitter_write(); + blitter_write (); alloc_cycle_ext (blit_last_hpos, CYCLE_BLITTER); if (blt_info.vblitsize == 0) { bltdpt = bltcpt; - blitter_done(); + blitter_done (); return; } } @@ -631,7 +630,7 @@ static void decide_blitter_line (int hpos) blit_last_hpos++; } } else { - blit_last_hpos = hpos; + blit_last_hpos = hpos + 1; } if (blit_last_hpos > maxhpos) blit_last_hpos = 0; @@ -828,7 +827,7 @@ void decide_blitter (int hpos) return; if (blit_linecyclecounter > 0) { - while (blit_linecyclecounter > 0 && blit_last_hpos < hpos) { + while (blit_linecyclecounter > 0 && blit_last_hpos <= hpos) { blit_linecyclecounter--; blit_last_hpos++; } @@ -836,7 +835,7 @@ void decide_blitter (int hpos) blit_last_hpos = 0; } if (blit_linecyclecounter > 0) { - blit_last_hpos = hpos; + blit_last_hpos = hpos + 1; return; } @@ -845,9 +844,9 @@ void decide_blitter (int hpos) decide_blitter_line (hpos); return; } - hpos++; + if (dmaen (DMA_BLITTER)) { - while (blit_last_hpos < hpos) { + while (blit_last_hpos <= hpos) { int c = channel_state (blit_cyclecounter); #ifdef BLITTER_SLOWDOWNDEBUG blitter_slowdowndebug--; @@ -913,7 +912,7 @@ void decide_blitter (int hpos) blit_last_hpos++; } } else { - blit_last_hpos = hpos; + blit_last_hpos = hpos + 1; } if (blit_last_hpos > maxhpos) blit_last_hpos = 0; diff --git a/cfgfile.c b/cfgfile.c index 3e2ba19e..5d631a2d 100755 --- a/cfgfile.c +++ b/cfgfile.c @@ -72,7 +72,6 @@ static const struct cfg_lines opttable[] = {"gfx_linemode", "Can be none, double, or scanlines" }, {"gfx_fullscreen_amiga", "Amiga screens are fullscreen?" }, {"gfx_fullscreen_picasso", "Picasso screens are fullscreen?" }, - {"gfx_correct_aspect", "Correct aspect ratio?" }, {"gfx_center_horizontal", "Center display horizontally?" }, {"gfx_center_vertical", "Center display vertically?" }, {"gfx_colour_mode", "" }, @@ -161,6 +160,7 @@ static const char *fullmodes[] = { "false", "true", /* "FILE_NOT_FOUND", */ "ful static const char *scsimode[] = { "false", "true", "scsi", 0 }; static const char *maxhoriz[] = { "lores", "hires", "superhires", 0 }; static const char *maxvert[] = { "nointerlace", "interlace", 0 }; +static const char *abspointers[] = { "none", "mousehack", "tablet", 0 }; static const char *obsolete[] = { "accuracy", "gfx_opengl", "gfx_32bit_blits", "32bit_blits", @@ -169,6 +169,7 @@ static const char *obsolete[] = { "gfx_test_speed", "gfxlib_replacement", "enforcer", "catweasel_io", "kickstart_key_file", "fast_copper", "sound_adjust", "serial_hardware_dtrdsr", "gfx_filter_upscale", + "gfx_correct_aspect", NULL }; @@ -501,6 +502,8 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write (f, "ghostscript_parameters=%s\n", p->ghostscript_parameters); cfgfile_write (f, "parallel_autoflush=%d\n", p->parallel_autoflush_time); cfgfile_dwrite (f, "uae_hide=%d\n", p->uae_hide); + cfgfile_dwrite (f, "magic_mouse=%s\n", p->input_magic_mouse ? "true" : "false"); + cfgfile_dwrite (f, "absolute_mouse=%s\n", abspointers[p->input_tablet]); cfgfile_write (f, "gfx_display=%d\n", p->gfx_display); cfgfile_write (f, "gfx_display_name=%s\n", p->gfx_display_name); @@ -521,12 +524,12 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write (f, "gfx_resolution=%s\n", lorestype1[p->gfx_resolution]); cfgfile_write (f, "gfx_lores_mode=%s\n", loresmode[p->gfx_lores_mode]); cfgfile_write (f, "gfx_linemode=%s\n", linemode1[p->gfx_linedbl]); - cfgfile_write (f, "gfx_correct_aspect=%s\n", p->gfx_correct_aspect ? "true" : "false"); cfgfile_write (f, "gfx_fullscreen_amiga=%s\n", fullmodes[p->gfx_afullscreen]); cfgfile_write (f, "gfx_fullscreen_picasso=%s\n", fullmodes[p->gfx_pfullscreen]); cfgfile_write (f, "gfx_center_horizontal=%s\n", centermode1[p->gfx_xcenter]); cfgfile_write (f, "gfx_center_vertical=%s\n", centermode1[p->gfx_ycenter]); cfgfile_write (f, "gfx_colour_mode=%s\n", colormode1[p->color_mode]); + cfgfile_write (f, "gfx_blacker_than_black=%s\n", p->gfx_blackerthanblack ? "true" : "false"); #ifdef GFXFILTER if (p->gfx_filter > 0) { @@ -934,9 +937,10 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value) || cfgfile_yesno (option, value, "filesys_no_fsdb", &p->filesys_no_uaefsdb) || cfgfile_yesno (option, value, "gfx_vsync", &p->gfx_avsync) || cfgfile_yesno (option, value, "gfx_vsync_picasso", &p->gfx_pvsync) - || cfgfile_yesno (option, value, "gfx_correct_aspect", &p->gfx_correct_aspect) + || cfgfile_yesno (option, value, "gfx_blacker_than_black", &p->gfx_blackerthanblack) || cfgfile_yesno (option, value, "show_leds", &p->leds_on_screen) || cfgfile_yesno (option, value, "synchronize_clock", &p->tod_hack) + || cfgfile_yesno (option, value, "magic_mouse", &p->input_magic_mouse) || cfgfile_yesno (option, value, "bsdsocket_emu", &p->socket_emu)) return 1; @@ -964,7 +968,8 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value) || cfgfile_strval (option, value, "gfx_color_mode", &p->color_mode, colormode1, 1) || cfgfile_strval (option, value, "gfx_color_mode", &p->color_mode, colormode2, 0) || cfgfile_strval (option, value, "gfx_max_horizontal", &p->gfx_max_horizontal, maxhoriz, 0) - || cfgfile_strval (option, value, "gfx_max_vertical", &p->gfx_max_vertical, maxvert, 0)) + || cfgfile_strval (option, value, "gfx_max_vertical", &p->gfx_max_vertical, maxvert, 0) + || cfgfile_strval (option, value, "absolute_mouse", &p->input_tablet, abspointers, 0)) return 1; @@ -2080,7 +2085,6 @@ static void parse_gfx_specs (struct uae_prefs *p, char *spec) p->gfx_linedbl += 2 * (strchr (x2, 'D') != 0); p->gfx_afullscreen = strchr (x2, 'a') != 0; p->gfx_pfullscreen = strchr (x2, 'p') != 0; - p->gfx_correct_aspect = strchr (x2, 'c') != 0; if (p->gfx_linedbl == 3) { write_log ("You can't use both 'd' and 'D' modifiers in the display mode specification.\n"); @@ -2942,7 +2946,6 @@ void default_prefs (struct uae_prefs *p, int type) p->gfx_linedbl = 1; p->gfx_afullscreen = 0; p->gfx_pfullscreen = 0; - p->gfx_correct_aspect = 0; p->gfx_xcenter = 0; p->gfx_ycenter = 0; p->gfx_xcenter_pos = -1; p->gfx_ycenter_pos = -1; p->gfx_xcenter_size = -1; p->gfx_ycenter_size = -1; @@ -3000,12 +3003,14 @@ void default_prefs (struct uae_prefs *p, int type) p->cs_slowmemisfast = 0; p->cs_resetwarning = 1; - p->gfx_filter = 0; + p->gfx_filter = 1; p->gfx_filtershader[0] = 0; p->gfx_filter_horiz_zoom_mult = 0; p->gfx_filter_vert_zoom_mult = 0; p->gfx_filter_filtermode = 0; p->gfx_filter_scanlineratio = (1 << 4) | 1; + p->gfx_filter_keep_aspect = 0; + p->gfx_filter_autoscale = 1; strcpy (p->df[0], "df0.adf"); strcpy (p->df[1], "df1.adf"); @@ -3026,7 +3031,8 @@ void default_prefs (struct uae_prefs *p, int type) p->fpu_model = 0; p->cpu_model = 68000; - p->cpu060_revision = 1; + p->mmu_model = 0; + p->cpu060_revision = 6; p->fpu_revision = -1; p->m68k_speed = 0; p->cpu_compatible = 1; @@ -3068,6 +3074,9 @@ void default_prefs (struct uae_prefs *p, int type) default_prefs_mini (p, 0); #endif + p->input_tablet = TABLET_OFF; + p->input_magic_mouse = 0; + inputdevice_default_prefs (p); zfile_fclose (default_file); diff --git a/cpummu.c b/cpummu.c index ff1319e0..092f886c 100755 --- a/cpummu.c +++ b/cpummu.c @@ -23,10 +23,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#define FULLMMU - - -#define DEBUG 0 +#define DEBUG 1 #include "sysconfig.h" #include "sysdeps.h" @@ -35,9 +32,6 @@ #include "newcpu.h" #include "cpummu.h" #include "debug.h" -#ifdef USE_JIT -# include "compiler/compemu.h" -#endif #define DBG_MMU_VERBOSE 1 #define DBG_MMU_SANITY 1 @@ -48,9 +42,9 @@ static mmu_atc_l1_array atc_l1[2]; static mmu_atc_l1_array *current_atc; static struct mmu_atc_line atc_l2[2][ATC_L2_SIZE]; -# ifdef ATC_STATS +#ifdef ATC_STATS static unsigned int mmu_atc_hits[ATC_L2_SIZE]; -# endif +#endif static void mmu_dump_ttr(const char * label, uae_u32 ttr) @@ -60,7 +54,7 @@ static void mmu_dump_ttr(const char * label, uae_u32 ttr) from_addr = ttr & MMU_TTR_LOGICAL_BASE; to_addr = (ttr & MMU_TTR_LOGICAL_MASK) << 8; - D(bug("%s: [%08lx] %08lx - %08lx enabled=%d supervisor=%d wp=%d cm=%02d", + D(bug("%s: [%08lx] %08lx - %08lx enabled=%d supervisor=%d wp=%d cm=%02d\n", label, ttr, from_addr, to_addr, ttr & MMU_TTR_BIT_ENABLED ? 1 : 0, @@ -87,7 +81,7 @@ void mmu_make_transparent_region(uaecptr baseaddr, uae_u32 size, int datamode) *ttr |= ((baseaddr + size - 1) & MMU_TTR_LOGICAL_BASE) >> 8; *ttr |= MMU_TTR_BIT_ENABLED; - D(bug("MMU: map transparent mapping of %08x", *ttr)); + D(bug("MMU: map transparent mapping of %08x\n", *ttr)); } /* check if an address matches a ttr */ @@ -130,15 +124,15 @@ STATIC_INLINE int mmu_match_ttr(uaecptr addr, int super, int data) } #if DEBUG +#define ROOT_TABLE_SIZE 128 +#define PTR_TABLE_SIZE 128 +#define PAGE_TABLE_SIZE 64 +#define ROOT_INDEX_SHIFT 25 +#define PTR_INDEX_SHIFT 18 /* {{{ mmu_dump_table */ static void mmu_dump_table(const char * label, uaecptr root_ptr) { - DUNUSED(label); - const int ROOT_TABLE_SIZE = 128, - PTR_TABLE_SIZE = 128, - PAGE_TABLE_SIZE = 64, - ROOT_INDEX_SHIFT = 25, - PTR_INDEX_SHIFT = 18; +// DUNUSED(label); // const int PAGE_INDEX_SHIFT = 12; int root_idx, ptr_idx, page_idx; uae_u32 root_des, ptr_des, page_des; @@ -270,7 +264,7 @@ void mmu_dump_atc(void) /* {{{ mmu_dump_tables */ void mmu_dump_tables(void) { - D(bug("URP: %08x SRP: %08x MMUSR: %x TC: %x", regs.urp, regs.srp, regs.mmusr, regs.tcr)); + D(bug("URP: %08x SRP: %08x MMUSR: %x TC: %x\n", regs.urp, regs.srp, regs.mmusr, regs.tcr)); mmu_dump_ttr("DTT0", regs.dtt0); mmu_dump_ttr("DTT1", regs.dtt1); mmu_dump_ttr("ITT0", regs.itt0); @@ -922,17 +916,14 @@ void REGPARAM2 mmu_op_real(uae_u32 opcode, uae_u16 extra) glob = (opcode & 8) != 0; if (opcode & 16) { - D(bug("pflusha(%u,%u)", glob, regs.dfc)); + D(bug("pflusha(%u,%u)\n", glob, regs.dfc)); mmu_flush_atc_all(glob); } else { addr = m68k_areg(®s, regno); - D(bug("pflush(%u,%u,%x)", glob, regs.dfc, addr)); + D(bug("pflush(%u,%u,%x)\n", glob, regs.dfc, addr)); mmu_flush_atc(addr, super, glob); } flush_internals(); -#ifdef USE_JIT - flush_icache(0); -#endif } else if ((opcode & 0x0FD8) == 0x548) { int write, regno; uae_u32 addr; @@ -941,7 +932,7 @@ void REGPARAM2 mmu_op_real(uae_u32 opcode, uae_u16 extra) write = (opcode & 32) == 0; addr = m68k_areg(®s, regno); //bug("ptest(%u,%u,%x)", write, regs.dfc, addr); - D(bug("PTEST%c (A%d) %08x DFC=%d", write ? 'W' : 'R', regno, addr, regs.dfc)); + D(bug("PTEST%c (A%d) %08x DFC=%d\n", write ? 'W' : 'R', regno, addr, regs.dfc)); mmu_flush_atc(addr, super, true); SAVE_EXCEPTION; TRY(prb) { @@ -965,7 +956,7 @@ void REGPARAM2 mmu_op_real(uae_u32 opcode, uae_u16 extra) regs.mmusr = MMU_MMUSR_B; } RESTORE_EXCEPTION; - D(bug("PTEST result: mmusr %08x", regs.mmusr)); + D(bug("PTEST result: mmusr %08x\n", regs.mmusr)); } else op_illg (opcode, ®s); } diff --git a/custom.c b/custom.c index be9cb41e..9cc86f29 100755 --- a/custom.c +++ b/custom.c @@ -242,7 +242,7 @@ enum diw_states DIW_waiting_start, DIW_waiting_stop }; -static int plffirstline, plflastline; +int plffirstline, plflastline; static int plfstrt_start, plfstrt, plfstop; static int sprite_minx, sprite_maxx; static int first_bpl_vpos; @@ -251,6 +251,7 @@ static int last_decide_line_hpos, last_sprite_decide_line_hpos; static int last_fetch_hpos, last_sprite_hpos; int diwfirstword, diwlastword; static enum diw_states diwstate, hdiwstate, ddfstate; +int first_planes_vpos, last_planes_vpos; /* Sprite collisions */ static unsigned int clxdat, clxcon, clxcon2, clxcon_bpl_enable, clxcon_bpl_match; @@ -2590,8 +2591,11 @@ void init_hz (void) #ifdef PICASSO96 init_hz_p96 (); #endif - write_log ("%s mode, V=%dHz H=%dHz (%dx%d)\n", + inputdevice_tablet_strobe (); + write_log ("%s mode%s%s V=%dHz H=%dHz (%dx%d)\n", isntsc ? "NTSC" : "PAL", + (bplcon0 & 4) ? " interlaced" : "", + doublescan ? " dblscan" : "", vblank_hz, vblank_hz * maxvpos, maxhpos, maxvpos); } @@ -2754,13 +2758,13 @@ STATIC_INLINE uae_u16 VPOSR (void) static void VPOSW (uae_u16 v) { #if 0 - write_log ("vposw %x at %x\n", v, m68k_getpc (®s)); + write_log ("vposw %d PC=%08x\n", v, M68K_GETPC); #endif if (lof != (v & 0x8000)) lof_changed = 1; lof = v & 0x8000; if ((v & 1) && vpos > 0) - hack_vpos = vpos; + hack_vpos = vpos + 1; } STATIC_INLINE uae_u16 VHPOSR (void) @@ -3159,6 +3163,14 @@ static void BPLCON0 (int hpos, uae_u16 v) decide_fetch (hpos); decide_blitter (hpos); + if (vpos > first_planes_vpos && vpos >= minfirstline && first_planes_vpos == 0) { + if (GET_PLANES (v) > 0) + first_planes_vpos = vpos; + } + if (GET_PLANES (v) == 0 && GET_PLANES (bplcon0) > 0 && vpos > last_planes_vpos) { + last_planes_vpos = vpos; + } + // fake unused 0x0080 bit as an EHB bit (see below) if (isehb (v, bplcon2)) v |= 0x80; @@ -4400,6 +4412,8 @@ static void init_hardware_frame (void) diwstate = DIW_waiting_start; hdiwstate = DIW_waiting_start; ddfstate = DIW_waiting_start; + first_planes_vpos = 0; + last_planes_vpos = 0; } void init_hardware_for_drawing_frame (void) @@ -4911,6 +4925,14 @@ static void hsync_handler (void) hsync_counter++; //copper_check (2); + if (vpos == minfirstline) { + if (GET_PLANES (bplcon0) > 0) + first_planes_vpos = minfirstline; + } else if (vpos == maxvpos - 1) { + if (GET_PLANES (bplcon0) > 0) + last_planes_vpos = vpos - 1; + } + #if 0 { static int skip; diff --git a/drawing.c b/drawing.c index af352616..2580ead0 100755 --- a/drawing.c +++ b/drawing.c @@ -182,7 +182,7 @@ uae_u8 line_data[(MAXVPOS + 1) * 2][MAX_PLANES * MAX_WORDS_PER_LINE * 2]; static int min_diwstart, max_diwstop; /* The visible window: VISIBLE_LEFT_BORDER contains the left border of the visible area, VISIBLE_RIGHT_BORDER the right border. These are in window coordinates. */ -static int visible_left_border, visible_right_border; +int visible_left_border, visible_right_border; static int linetoscr_x_adjust_bytes; static int thisframe_y_adjust; static int thisframe_y_adjust_real, max_ypos_thisframe, min_ypos_for_screen; @@ -257,6 +257,7 @@ static void xlinecheck (unsigned int start, unsigned int end) #define xlinecheck #endif + STATIC_INLINE void count_frame (void) { framecnt++; @@ -306,6 +307,121 @@ void notice_screen_contents_lost (void) frame_redraw_necessary = 2; } + +extern int plffirstline, plflastline; +extern int first_planes_vpos, last_planes_vpos; + +#define MIN_DISPLAY_W 256 +#define MIN_DISPLAY_H 192 +#define MAX_DISPLAY_W 344 +#define MAX_DISPLAY_H 272 + +int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy) +{ + int w, h, dx, dy, y1, y2, dbl1, dbl2; + static int ow, oh, ox, oy; + int ret = 0; + + *pw = ow; + *ph = oh; + *pdx = ox; + *pdy = oy; + + if (ow > 0 && oh > 0) + ret = -1; + + w = diwlastword - diwfirstword; + dx = diwfirstword - visible_left_border; + y2 = plflastline > last_planes_vpos ? last_planes_vpos : plflastline; + y1 = plffirstline > first_planes_vpos ? plffirstline : first_planes_vpos; + if (y1 < minfirstline) + y1 = first_planes_vpos; + h = y2 - y1; + dy = plffirstline - minfirstline; + if (dy < 0) + dy = first_planes_vpos - minfirstline; + + dbl2 = dbl1 = currprefs.gfx_linedbl ? 1 : 0; + dy = xshift (dy, dbl2); + h = xshift (h, dbl1); + + if (w == 0 || h == 0) + return 0; + + if (ow == w && oh == h && ox == dx && oy == dy) + return ret; + + if (w <= 0 || h <= 0 || dx <= 0 || dy <= 0) + return ret; + if (dx > gfxvidinfo.width / 4) + return ret; + if (dy > gfxvidinfo.height / 4) + return ret; + + if ((w >> currprefs.gfx_resolution) < MIN_DISPLAY_W) + w = MIN_DISPLAY_W << currprefs.gfx_resolution; + if ((h >> dbl1) < MIN_DISPLAY_H) + h = MIN_DISPLAY_H << dbl1; + + if ((w >> currprefs.gfx_resolution) > MAX_DISPLAY_W) + w = MAX_DISPLAY_W << currprefs.gfx_resolution; + if ((h >> dbl1) > MAX_DISPLAY_H) + h = MAX_DISPLAY_H << dbl1; + + ow = w; + oh = h; + ox = dx; + oy = dy; + *pw = w; + *ph = h; + *pdx = dx; + *pdy = dy; + return 1; +} + +void get_custom_mouse_limits (int *pw, int *ph, int *pdx, int *pdy, int dbl) +{ + int w, h, dx, dy, dbl1, dbl2, y1, y2; + + w = diwlastword - diwfirstword; + dx = diwfirstword - visible_left_border; + y2 = plflastline > last_planes_vpos ? last_planes_vpos : plflastline; + y1 = plffirstline > first_planes_vpos ? plffirstline : first_planes_vpos; + h = y2 - y1; + dy = plffirstline - minfirstline; + + if (*pw > 0) + w = *pw; + + w = xshift (w, res_shift); + + if (*ph > 0) + h = *ph; + + dbl2 = dbl1 = currprefs.gfx_linedbl ? 1 : 0; + if ((doublescan || interlace_seen) && !dbl) { + dbl1--; + dbl2--; + } + if (interlace_seen) + dbl2++; + if (!interlace_seen && dbl) + dbl2--; + h = xshift (h, dbl1); + dy = xshift (dy, dbl2); + + if (w < 1) + w = 1; + if (h < 1) + h = 1; + if (dx < 0) + dx = 0; + if (dy < 0) + dy = 0; + *pw = w; *ph = h; + *pdx = dx; *pdy = dy; +} + static struct decision *dp_for_drawing; static struct draw_info *dip_for_drawing; @@ -440,10 +556,6 @@ static void pfield_init_linetoscr (void) } } -void drawing_adjust_mousepos (int *xp, int *yp) -{ -} - STATIC_INLINE uae_u8 merge_2pixel8 (uae_u8 p1, uae_u8 p2) { return p1; @@ -1491,7 +1603,6 @@ void init_row_map (void) static void init_aspect_maps (void) { int i, maxl; - double native_lines_per_amiga_line; if (gfxvidinfo.height == 0) /* Do nothing if the gfx driver hasn't initialized the screen yet */ @@ -1512,19 +1623,11 @@ static void init_aspect_maps (void) amiga2aspect_line_map = xmalloc (sizeof (int) * (MAXVPOS + 1) * 2 + 1); native2amiga_line_map = xmalloc (sizeof (int) * gfxvidinfo.height); - if (currprefs.gfx_correct_aspect) - native_lines_per_amiga_line = ((double)gfxvidinfo.height - * (320 << lores_shift) - / (linedbld ? 512 : 256) - / gfxvidinfo.width); - else - native_lines_per_amiga_line = 1; - maxl = (MAXVPOS + 1) * (linedbld ? 2 : 1); min_ypos_for_screen = minfirstline << (linedbl ? 1 : 0); max_drawn_amiga_line = -1; for (i = 0; i < maxl; i++) { - int v = (int) ((i - min_ypos_for_screen) * native_lines_per_amiga_line); + int v = i - min_ypos_for_screen; if (v >= gfxvidinfo.height && max_drawn_amiga_line == -1) max_drawn_amiga_line = i - min_ypos_for_screen; if (i < min_ypos_for_screen || v >= gfxvidinfo.height) @@ -1534,7 +1637,7 @@ static void init_aspect_maps (void) if (linedbl) max_drawn_amiga_line >>= 1; - if (currprefs.gfx_ycenter && !(currprefs.gfx_correct_aspect)) { + if (currprefs.gfx_ycenter && !currprefs.gfx_filter_autoscale) { /* @@@ verify maxvpos vs. MAXVPOS */ extra_y_adjust = (gfxvidinfo.height - (maxvpos_max << (linedbl ? 1 : 0))) >> 1; if (extra_y_adjust < 0) @@ -1544,22 +1647,6 @@ static void init_aspect_maps (void) for (i = 0; i < gfxvidinfo.height; i++) native2amiga_line_map[i] = -1; - if (native_lines_per_amiga_line < 1) { - /* Must omit drawing some lines. */ - for (i = maxl - 1; i > min_ypos_for_screen; i--) { - if (amiga2aspect_line_map[i] == amiga2aspect_line_map[i-1]) { - if (linedbl && (i & 1) == 0 && amiga2aspect_line_map[i+1] != -1) { - /* If only the first line of a line pair would be omitted, - * omit the second one instead to avoid problems with line - * doubling. */ - amiga2aspect_line_map[i] = amiga2aspect_line_map[i+1]; - amiga2aspect_line_map[i+1] = -1; - } else - amiga2aspect_line_map[i] = -1; - } - } - } - for (i = maxl - 1; i >= min_ypos_for_screen; i--) { int j; if (amiga2aspect_line_map[i] == -1) @@ -1969,7 +2056,7 @@ static void center_image (void) int prev_y_adjust = thisframe_y_adjust; int tmp; - if (currprefs.gfx_xcenter) { + if (currprefs.gfx_xcenter && !currprefs.gfx_filter_autoscale) { int w = gfxvidinfo.width; if (max_diwstop - min_diwstart < w && currprefs.gfx_xcenter == 2) @@ -2023,7 +2110,7 @@ static void center_image (void) visible_right_border = max_diwlastword; thisframe_y_adjust = minfirstline; - if (currprefs.gfx_ycenter && thisframe_first_drawn_line != -1) { + if (currprefs.gfx_ycenter && thisframe_first_drawn_line != -1 && !currprefs.gfx_filter_autoscale) { if (thisframe_last_drawn_line - thisframe_first_drawn_line < max_drawn_amiga_line && currprefs.gfx_ycenter == 2) thisframe_y_adjust = (thisframe_last_drawn_line - thisframe_first_drawn_line - max_drawn_amiga_line) / 2 + thisframe_first_drawn_line; diff --git a/expansion.c b/expansion.c index 9ab5e783..6c47104c 100755 --- a/expansion.c +++ b/expansion.c @@ -1216,7 +1216,7 @@ static uaecptr check_boot_rom (void) return b; if (currprefs.sana2) return b; - if (currprefs.win32_outsidemouse) + if (currprefs.input_tablet > 0 || currprefs.input_magic_mouse == 0) return b; if (currprefs.gfxmem_size) return b; @@ -1235,6 +1235,10 @@ uaecptr need_uae_boot_rom (void) v = check_boot_rom (); if (v) uae_boot_rom = 1; + if (!rtarea_base) { + uae_boot_rom = 0; + v = 0; + } return v; } diff --git a/filesys b/filesys index d76f4e7a..847c5e1c 100755 Binary files a/filesys and b/filesys differ diff --git a/filesys.c b/filesys.c index d9a0ee25..e2b1c838 100755 --- a/filesys.c +++ b/filesys.c @@ -49,6 +49,7 @@ #include "sana2.h" #include "bsdsocket.h" #include "uaeresource.h" +#include "inputdevice.h" #define TRACING_ENABLED 0 #if TRACING_ENABLED @@ -5402,8 +5403,10 @@ static uae_u32 REGPARAM2 filesys_dev_storeinfo (TrapContext *context) static uae_u32 REGPARAM2 mousehack_done (TrapContext *context) { - /* do not allow other fs threads to start another mousehack */ - rtarea[get_long (rtarea_base + 40) + 12 - 2] = 0xff; + int mode = m68k_dreg (&context->regs, 1); + uaecptr a2 = m68k_areg (&context->regs, 2); + uaecptr a3 = m68k_areg (&context->regs, 3); + input_mousehack_status (mode, a2, a3); return 1; } @@ -5469,12 +5472,13 @@ void filesys_install (void) void filesys_install_code (void) { + uae_u32 a; align(4); + a = here (); /* The last offset comes from the code itself, look for it near the top. */ - EXPANSION_bootcode = here () + 8 + 0x1c + 4; - /* Ouch. Make sure this is _always_ a multiple of two bytes. */ - filesys_initcode = here() + 8 + 0x30 + 4; + EXPANSION_bootcode = a + 40 - 4; + filesys_initcode = a + 40 - 4 + 20; #include "filesys_bootrom.c" } diff --git a/filesys_bootrom.c b/filesys_bootrom.c index e19ba0e8..5ad240e0 100755 --- a/filesys_bootrom.c +++ b/filesys_bootrom.c @@ -1,501 +1,591 @@ db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x60); db(0x00); db(0x09); db(0x78); db(0x00); db(0x00); db(0x07); db(0x42); - db(0x00); db(0x00); db(0x00); db(0x34); db(0x00); db(0x00); db(0x01); db(0x78); - db(0x00); db(0x00); db(0x00); db(0x20); db(0x00); db(0x00); db(0x02); db(0x34); - db(0x00); db(0x00); db(0x0b); db(0xba); db(0x00); db(0x00); db(0x0d); db(0x52); - db(0x43); db(0xfa); db(0x0f); db(0x28); 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(0x0b); db(0x68); db(0x2a); db(0x50); db(0x43); db(0xfa); - db(0x0f); db(0x20); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0c); db(0x43); db(0xfa); - db(0x0f); db(0x10); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x4a); db(0xad); db(0x01); db(0x0c); - db(0x67); db(0x5a); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); - db(0x22); db(0x3c); db(0x00); db(0x01); db(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(0x2c); - db(0x2f); db(0x06); db(0x7e); db(0x01); db(0x4a); db(0x45); db(0x67); db(0x04); - db(0x08); db(0xc7); db(0x00); db(0x02); db(0x2f); db(0x0b); db(0x20); db(0x4b); - db(0x61); db(0x00); db(0x06); db(0xa8); 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(0xdc); db(0x2c); db(0x1f); - db(0x52); db(0x46); db(0x60); db(0xce); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x22); db(0x4b); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); - db(0x4e); db(0xae); db(0xff); db(0x2e); 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(0x0a); db(0xd6); 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(0x0e); db(0x2c); db(0x43); db(0xfa); db(0x00); db(0x1c); - db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0b); db(0xf6); db(0x22); db(0x40); - db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); - db(0x0a); db(0xa2); 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(0x0e); db(0x28); 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(0x0d); db(0xff); db(0x22); db(0x08); db(0x74); db(0x0f); - db(0x41); db(0xfa); db(0x00); db(0x22); 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(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(0x0a); db(0x42); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); - db(0x61); db(0x00); db(0x07); db(0x90); 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(0x0a); db(0x28); 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(0x0a); db(0x12); 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(0xfe); db(0xbc); db(0x60); db(0xd6); db(0x0c); db(0x40); db(0x00); db(0x03); - db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x86); db(0x60); db(0xca); - db(0x0c); db(0x40); db(0x00); db(0x04); db(0x6e); db(0x06); db(0x4e); db(0xae); - db(0xff); db(0x4c); db(0x60); db(0xbe); db(0x0c); db(0x40); db(0x00); db(0x05); - db(0x6e); db(0x46); db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x70); db(0x26); - db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x40); - db(0x15); db(0x7c); db(0x00); db(0x08); db(0x00); db(0x08); db(0x25); db(0x48); - db(0x00); db(0x0e); db(0x35); db(0x7c); db(0x00); db(0x26); db(0x00); db(0x12); - db(0x25); db(0x7c); db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); - 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(0x09); db(0x84); - 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(0x0c); db(0xc7); 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); - db(0xff); db(0x58); db(0x4c); db(0xdf); db(0x03); db(0x03); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x00); db(0xbe); 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(0x70); db(0x00); - 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(0x0c); db(0x61); - db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x98); - db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10); - db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); - db(0x0c); db(0x9a); db(0x00); db(0x00); db(0x03); db(0xf3); db(0x66); db(0x00); - db(0x00); db(0xe4); db(0x50); db(0x8a); db(0x2e); db(0x2a); db(0x00); db(0x04); - db(0x9e); db(0x92); db(0x50); db(0x8a); db(0x52); db(0x87); db(0x26); db(0x4a); - db(0x20); db(0x07); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xd7); db(0xc0); - db(0x28); db(0x4a); db(0x9b); db(0xcd); db(0x7c); db(0x00); db(0x24); db(0x12); - db(0x72); db(0x01); db(0x08); db(0x02); db(0x00); db(0x1e); db(0x67); db(0x04); - db(0x08); db(0xc1); db(0x00); db(0x01); db(0x08); db(0xc1); db(0x00); db(0x10); - db(0xe5); db(0x8a); db(0x20); db(0x02); db(0x66); db(0x04); db(0x42); db(0x9a); - db(0x60); db(0x1e); db(0x50); db(0x80); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa0); db(0x20); db(0x40); - db(0x20); db(0xc2); db(0x24); db(0xc8); db(0x22); db(0x0d); db(0x67); db(0x06); - db(0x20); db(0x08); db(0xe4); db(0x88); db(0x2a); db(0x80); db(0x2a); db(0x48); - db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0xc0); db(0x7c); db(0x00); - db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); - db(0x18); db(0x00); db(0x58); db(0x88); db(0x26); db(0x1b); db(0x28); db(0x1b); - db(0xe5); db(0x8c); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xe9); - db(0x67); db(0x08); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xea); - db(0x66); db(0x0c); db(0x20); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x0e); - db(0x10); db(0xdb); db(0x53); db(0x80); db(0x60); db(0xf6); db(0x0c); db(0x83); - db(0x00); db(0x00); db(0x03); db(0xeb); db(0x66); db(0x4e); db(0x26); db(0x1b); - db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xec); db(0x66); db(0x28); - db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); - db(0x18); db(0x00); db(0x58); db(0x88); db(0x20); db(0x1b); db(0x67); db(0xe6); - db(0x22); db(0x1b); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x26); db(0x34); - db(0x18); db(0x00); db(0x58); db(0x83); db(0x24); db(0x1b); db(0xd7); db(0xb0); - db(0x28); db(0x00); db(0x53); db(0x80); db(0x66); db(0xf6); db(0x60); db(0xe4); - db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xf2); db(0x66); db(0x14); - db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0x00); db(0xff); db(0x8a); - db(0x7e); db(0x01); db(0x20); db(0x54); db(0x20); db(0x07); db(0x4c); db(0xdf); - db(0x7e); db(0xfe); db(0x4e); db(0x75); db(0x7e); db(0x00); db(0x60); db(0xf4); - db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); db(0x4a); db(0x90); - db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); db(0x45); db(0xfa); - db(0x0b); db(0xa2); 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(0x60); db(0x00); db(0x09); db(0x6a); db(0x00); db(0x00); db(0x07); db(0x48); + db(0x00); db(0x00); db(0x00); db(0x30); db(0x00); db(0x00); db(0x01); db(0x74); + db(0x00); db(0x00); db(0x00); db(0x1c); db(0x00); db(0x00); db(0x02); db(0x30); + db(0x00); db(0x00); db(0x0d); db(0x52); db(0x43); db(0xfa); db(0x11); db(0xef); + 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(0x0b); db(0x56); + db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x11); db(0xf8); db(0x70); db(0x24); + db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); + db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x11); db(0xe8); db(0x70); db(0x00); + db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); + db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x5a); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); + db(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(0x2c); db(0x2f); db(0x06); db(0x7e); db(0x01); + db(0x4a); db(0x45); db(0x67); db(0x04); db(0x08); db(0xc7); db(0x00); db(0x02); + db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); db(0x06); db(0xb2); + 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(0xdc); db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x60); db(0xce); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4b); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); + 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(0x0a); db(0xc4); 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(0x10); db(0xf3); + db(0x43); db(0xfa); db(0x00); db(0x1c); db(0x70); db(0x0a); db(0x61); db(0x00); + db(0x0b); db(0xa2); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); + db(0xff); db(0x48); db(0x61); db(0x00); db(0x0a); db(0x90); 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(0x10); db(0xef); + 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(0x10); db(0xc6); + db(0x22); db(0x08); db(0x74); db(0x0f); db(0x41); db(0xfa); db(0x00); db(0x22); + 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(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(0x0a); db(0x30); db(0x4e); db(0x90); + db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x07); db(0x86); + 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(0x0a); db(0x16); + 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(0x0a); db(0x00); 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(0xfe); db(0xbc); db(0x60); db(0xd6); + db(0x0c); db(0x40); db(0x00); db(0x03); db(0x6e); db(0x06); db(0x4e); db(0xae); + db(0xfe); db(0x86); db(0x60); db(0xca); db(0x0c); db(0x40); db(0x00); db(0x04); + db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xff); db(0x4c); db(0x60); db(0xbe); + db(0x0c); db(0x40); db(0x00); db(0x05); db(0x6e); db(0x46); db(0x48); db(0xe7); + db(0x00); db(0xc0); db(0x70); db(0x26); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4c); db(0xdf); + db(0x03); db(0x00); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); + db(0x00); db(0x08); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x35); db(0x7c); + db(0x00); db(0x26); db(0x00); db(0x12); db(0x25); db(0x7c); db(0x40); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x14); 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(0x09); db(0x72); 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(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); db(0x00); db(0x08); - db(0x41); db(0xfa); db(0x0b); db(0x78); db(0x25); db(0x48); db(0x00); db(0x0a); - db(0x41); db(0xfa); db(0x0b); db(0x05); 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(0x7c); 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(0x62); 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(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(0x32); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); - db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); - db(0x61); db(0x00); db(0x00); db(0xac); db(0x08); db(0x07); db(0x00); db(0x01); + db(0x22); db(0x40); db(0x41); db(0xfa); db(0x0f); db(0x8e); 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); db(0xff); db(0x58); db(0x30); db(0x3a); + db(0x0a); db(0xea); db(0x67); db(0x04); db(0x61); db(0x00); db(0x0a); db(0x88); + db(0x4c); db(0xdf); db(0x03); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); + db(0x26); db(0x49); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbe); + 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(0x70); db(0x00); 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(0x0f); db(0x1e); db(0x23); db(0x48); + db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x98); db(0x41); db(0xe8); + db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10); db(0x4c); db(0xdf); + db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x7f); db(0x7e); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); db(0x0c); db(0x9a); + db(0x00); db(0x00); db(0x03); db(0xf3); db(0x66); db(0x00); db(0x00); db(0xe4); + db(0x50); db(0x8a); db(0x2e); db(0x2a); db(0x00); db(0x04); db(0x9e); db(0x92); + db(0x50); db(0x8a); db(0x52); db(0x87); db(0x26); db(0x4a); db(0x20); db(0x07); + db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xd7); db(0xc0); db(0x28); db(0x4a); + db(0x9b); db(0xcd); db(0x7c); db(0x00); db(0x24); db(0x12); db(0x72); db(0x01); + db(0x08); db(0x02); db(0x00); db(0x1e); db(0x67); db(0x04); db(0x08); db(0xc1); + db(0x00); db(0x01); db(0x08); db(0xc1); db(0x00); db(0x10); db(0xe5); db(0x8a); + db(0x20); db(0x02); db(0x66); db(0x04); db(0x42); db(0x9a); db(0x60); db(0x1e); + db(0x50); db(0x80); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); + db(0x67); db(0x00); db(0x00); db(0xa0); db(0x20); db(0x40); db(0x20); db(0xc2); + db(0x24); db(0xc8); db(0x22); db(0x0d); db(0x67); db(0x06); db(0x20); db(0x08); + db(0xe4); db(0x88); db(0x2a); db(0x80); db(0x2a); db(0x48); db(0x52); db(0x86); + db(0xbe); db(0x86); db(0x66); db(0xc0); db(0x7c); db(0x00); db(0x22); db(0x06); + db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); + db(0x58); db(0x88); db(0x26); db(0x1b); db(0x28); db(0x1b); db(0xe5); db(0x8c); + db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xe9); db(0x67); db(0x08); + db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xea); db(0x66); db(0x0c); + db(0x20); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x10); db(0xdb); + db(0x53); db(0x80); db(0x60); db(0xf6); db(0x0c); db(0x83); db(0x00); db(0x00); + db(0x03); db(0xeb); db(0x66); db(0x4e); db(0x26); db(0x1b); db(0x0c); db(0x83); + db(0x00); db(0x00); db(0x03); db(0xec); db(0x66); db(0x28); db(0x22); db(0x06); + db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); + db(0x58); db(0x88); db(0x20); db(0x1b); db(0x67); db(0xe6); db(0x22); db(0x1b); + db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x26); db(0x34); db(0x18); db(0x00); + db(0x58); db(0x83); db(0x24); db(0x1b); db(0xd7); db(0xb0); db(0x28); db(0x00); + db(0x53); db(0x80); db(0x66); db(0xf6); db(0x60); db(0xe4); db(0x0c); db(0x83); + db(0x00); db(0x00); db(0x03); db(0xf2); db(0x66); db(0x14); db(0x52); db(0x86); + db(0xbe); db(0x86); db(0x66); db(0x00); db(0xff); db(0x8a); db(0x7e); db(0x01); + db(0x20); db(0x54); db(0x20); db(0x07); db(0x4c); db(0xdf); db(0x7e); db(0xfe); + db(0x4e); db(0x75); db(0x7e); db(0x00); db(0x60); db(0xf4); db(0x48); db(0xe7); + db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xee); + db(0x01); db(0x50); db(0x20); db(0x50); db(0x4a); db(0x90); db(0x67); db(0x1a); + db(0x22); db(0x68); db(0x00); db(0x0a); db(0x45); db(0xfa); db(0x0e); db(0x70); + 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(0x0e); db(0x46); db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); + db(0x0d); db(0xc2); 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(0x7c); 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(0x62); 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(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x66); db(0x0c); - db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x20); db(0x6b); db(0x00); db(0xb4); - db(0x61); db(0x00); db(0x00); db(0x94); 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(0x62); 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(0x32); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); - db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); - db(0x61); db(0x00); db(0x00); db(0x44); db(0x08); db(0x07); db(0x00); db(0x01); + 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(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); + db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); + db(0x00); db(0xac); db(0x08); db(0x07); 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(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); + db(0x00); db(0x94); 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(0x62); 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(0x20); db(0x6b); db(0x00); db(0xb4); - db(0x61); db(0x00); db(0x00); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x76); - db(0x4c); db(0xdf); db(0x44); db(0x80); db(0x4e); db(0x75); db(0x22); db(0x48); - db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); - db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); - 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(0x75); db(0x24); db(0x48); - db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); - db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); - db(0x22); db(0x68); db(0x00); db(0x04); db(0xd3); db(0xc9); db(0xd3); db(0xc9); - db(0xb3); db(0xca); db(0x66); db(0x06); db(0x21); db(0x52); db(0x00); db(0x04); - db(0x60); db(0x18); db(0x20); db(0x09); db(0x67); db(0x0e); db(0x20); db(0x11); - db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xb5); db(0xc0); db(0x67); db(0x04); - db(0x22); db(0x40); db(0x60); db(0xee); db(0x20); db(0x09); db(0x67); db(0x02); - db(0x22); db(0x92); 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(0xfd); db(0xf2); - 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(0x68); - 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(0x90); db(0x67); db(0x0c); db(0x4a); db(0xa8); db(0x00); db(0x08); - db(0x66); db(0x0a); db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x04); - db(0x70); db(0x01); 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(0x7a); db(0x00); db(0x4a); db(0x87); db(0x67); db(0x70); db(0x20); db(0x0a); - db(0x67); db(0x6c); 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(0x24); db(0x20); db(0x2a); db(0x00); db(0x04); db(0x90); db(0x8a); - db(0x4a); db(0x92); db(0x66); db(0x0a); db(0x20); db(0x05); db(0x67); db(0x10); - db(0x20); db(0x40); db(0x42); db(0x90); db(0x60); db(0x0a); db(0x20); db(0x52); - db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x80); db(0x6a); db(0xfa); - db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x94); db(0x2a); db(0x0a); - db(0x24); db(0x52); db(0x53); db(0x87); db(0x60); db(0x8c); db(0x4c); db(0xdf); - db(0x7c); db(0xfc); db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); - db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfc); db(0x7c); 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(0x04); db(0x58); db(0x2a); db(0x50); db(0x30); db(0x3c); - db(0xff); db(0x28); db(0x61); db(0x00); db(0x04); db(0x4e); 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(0x43); - db(0xff); db(0xfe); db(0x67); db(0x00); db(0xf9); db(0x9c); db(0x0c); db(0x43); - db(0x00); db(0x01); db(0x66); db(0x0e); db(0x08); db(0x07); db(0x00); db(0x02); - db(0x66); db(0x08); db(0x08); db(0x07); db(0x00); db(0x01); db(0x66); db(0x00); - db(0x00); db(0x02); db(0x20); db(0x28); db(0x01); db(0x90); db(0x67); db(0x14); - db(0x6b); 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(0xfa); 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(0xe0); 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(0xfa); db(0xde); 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(0x68); db(0x4a); db(0x83); db(0x6b); db(0x00); db(0xf9); db(0x02); - db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); db(0x03); db(0x94); - 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(0x41); db(0xfa); db(0xf7); db(0xce); - db(0x20); db(0x08); 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(0x3a); 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(0x70); db(0x00); db(0x4e); db(0x75); db(0x24); db(0x49); - db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); db(0x08); db(0x07); - db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); db(0x00); db(0x02); - 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(0x08); db(0x07); db(0x00); db(0x01); - db(0x67); db(0x5c); db(0x08); db(0x07); db(0x00); db(0x02); db(0x66); db(0x56); - db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); db(0x4a); db(0x30); - db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x4a); db(0x80); db(0x67); db(0x3a); db(0x20); db(0x52); db(0x24); db(0x40); - db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x13); db(0x7c); - db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x43); db(0xfa); db(0x06); db(0x6e); db(0x70); db(0x00); - db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); db(0x22); db(0x0a); - db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); - db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2c); db(0x01); - db(0x7e); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); - db(0x06); db(0x58); db(0x70); db(0x24); db(0x4e); db(0xae); db(0xfd); db(0xd8); - db(0x4a); db(0x80); db(0x66); db(0x0e); db(0x08); db(0x87); db(0x00); db(0x02); - db(0x43); db(0xfa); db(0x06); db(0x46); db(0x70); db(0x00); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x4a); db(0x80); - db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0x9c); db(0x48); db(0xe7); - db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfd); db(0xf6); db(0x4c); db(0xdf); - db(0x51); db(0x00); 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(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); 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(0xbe); 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(0xc2); db(0x27); db(0x40); db(0x00); db(0xa4); db(0x61); db(0x00); - db(0x02); db(0xee); db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); - db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); - db(0x4e); db(0xae); db(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(0xba); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); - db(0x70); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x34); db(0x08); db(0x02); - db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); - db(0xfb); db(0x9c); db(0x61); db(0x00); db(0x03); db(0x4a); db(0x60); db(0x00); - db(0x00); db(0xfc); db(0x61); db(0x00); db(0x03); db(0x42); 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(0xfc); db(0x40); 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(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3a); db(0x20); db(0x6c); - db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); db(0x02); db(0x80); - db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); db(0x80); db(0x00); - db(0x00); db(0x08); db(0x66); db(0x18); db(0x02); db(0xa8); db(0x7f); db(0xff); - db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); db(0x00); db(0x10); - db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); db(0x4e); db(0xae); - db(0xfe); db(0x92); db(0x60); db(0x86); db(0x22); db(0x4c); db(0x70); db(0x26); - db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x7c); - db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x3e); db(0x30); db(0x3c); - db(0xff); db(0x50); db(0x61); db(0x00); db(0x01); db(0x06); db(0x70); db(0x01); - db(0x4e); db(0x90); db(0x45); db(0xeb); db(0x00); db(0x04); db(0x20); db(0x52); - db(0x20); db(0x08); db(0x67); db(0x00); db(0xff); db(0x5e); db(0x22); db(0x50); - db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); db(0x6a); db(0x16); - db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x28); db(0x68); db(0x00); db(0x0a); - db(0x61); db(0x4a); db(0x53); db(0x85); db(0x4c); db(0xdf); db(0x03); db(0x00); - db(0x24); db(0x89); db(0x20); db(0x49); db(0x60); db(0xda); db(0x24); db(0x48); - db(0x20); db(0x49); db(0x60); db(0xd4); db(0x0c); db(0x85); db(0x00); db(0x00); - db(0x00); db(0x14); db(0x65); db(0x00); db(0x00); db(0x0a); db(0x70); db(0x01); - db(0x29); db(0x40); db(0x00); db(0x04); db(0x60); db(0x12); db(0x61); db(0x5c); - db(0x30); db(0x3c); db(0xff); db(0x30); db(0x61); db(0x00); db(0x00); db(0xb4); - db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x52); db(0x85); - db(0x28); db(0xab); db(0x00); db(0x04); db(0x27); db(0x4c); db(0x00); db(0x04); - 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(0xfb); db(0x40); db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09); - db(0x00); db(0x08); db(0x66); db(0x12); db(0x61); db(0x00); db(0xfb); db(0x6e); - db(0x66); db(0x0c); db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); - db(0x00); db(0x72); db(0x4e); db(0x90); db(0x60); db(0xee); 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(0x67); db(0x00); - db(0x00); db(0x0c); db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); - db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); - db(0x24); db(0x47); db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); - db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); - db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); - db(0x20); db(0x10); db(0x67); db(0x18); db(0x70); db(0x00); 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(0xf4); db(0x48); 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); db(0xc0); db(0xe2); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); - db(0xfe); db(0xda); db(0x24); db(0x40); db(0x22); db(0x4a); db(0x70); db(0xec); - db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x41); db(0xfa); db(0xff); db(0xda); - db(0x32); db(0x10); db(0xb2); db(0x50); db(0x67); db(0xfc); db(0x22); db(0x4a); - db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x72); db(0x01); db(0x4c); db(0xdf); - db(0x47); db(0x03); db(0x58); db(0x8f); db(0x4e); db(0x75); db(0x20); db(0x88); - db(0x58); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x21); db(0x48); - db(0x00); db(0x08); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); - db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff); - db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x91); db(0xc8); db(0x24); db(0x00); - db(0x6b); db(0x32); db(0x70); db(0x22); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x91); db(0xc8); - db(0x24); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x15); db(0x7c); - db(0x00); db(0x04); db(0x00); db(0x08); db(0x15); db(0x42); db(0x00); db(0x0f); - db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x25); db(0x40); - db(0x00); db(0x10); db(0x41); db(0xea); db(0x00); db(0x14); db(0x61); db(0x00); - db(0xff); db(0xae); db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); - db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); - db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x4a); db(0x80); + 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(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); + db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); + db(0x00); db(0x44); 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(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); + db(0x00); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); + db(0x44); db(0x80); db(0x4e); db(0x75); db(0x22); db(0x48); db(0x20); db(0x6b); + db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); + db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); 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(0x75); db(0x24); db(0x48); db(0x20); db(0x6b); + db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); + db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x22); db(0x68); + db(0x00); db(0x04); db(0xd3); db(0xc9); db(0xd3); db(0xc9); db(0xb3); db(0xca); + db(0x66); db(0x06); db(0x21); db(0x52); db(0x00); db(0x04); db(0x60); db(0x18); + db(0x20); db(0x09); db(0x67); db(0x0e); db(0x20); db(0x11); db(0xd0); db(0x80); + db(0xd0); db(0x80); db(0xb5); db(0xc0); db(0x67); db(0x04); db(0x22); db(0x40); + db(0x60); db(0xee); db(0x20); db(0x09); db(0x67); db(0x02); db(0x22); db(0x92); + 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(0xfd); db(0xf2); 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(0x68); 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(0x90); + db(0x67); db(0x0c); db(0x4a); db(0xa8); db(0x00); db(0x08); db(0x66); db(0x0a); + db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x04); db(0x70); db(0x01); + 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(0x7a); db(0x00); + db(0x4a); db(0x87); db(0x67); db(0x70); db(0x20); db(0x0a); db(0x67); db(0x6c); + 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(0x24); + db(0x20); db(0x2a); db(0x00); db(0x04); db(0x90); db(0x8a); db(0x4a); db(0x92); + db(0x66); db(0x0a); db(0x20); db(0x05); db(0x67); db(0x10); db(0x20); db(0x40); + db(0x42); db(0x90); db(0x60); db(0x0a); db(0x20); db(0x52); db(0x22); db(0x4a); + db(0x22); db(0xd8); db(0x59); db(0x80); db(0x6a); db(0xfa); db(0x53); db(0x95); + db(0x53); db(0x87); db(0x60); db(0x94); db(0x2a); db(0x0a); db(0x24); db(0x52); + db(0x53); db(0x87); db(0x60); db(0x8c); db(0x4c); db(0xdf); db(0x7c); db(0xfc); + db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); db(0x4e); db(0x75); + db(0x61); db(0x00); db(0xfc); db(0x7c); 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(0x04); db(0x3c); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); + db(0x61); db(0x00); db(0x04); db(0x32); 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(0x43); db(0xff); db(0xfe); + db(0x67); db(0x00); db(0xf9); db(0x92); db(0x20); db(0x28); db(0x01); db(0x90); + db(0x67); db(0x14); db(0x6b); 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(0xf2); 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(0xd8); 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(0xfa); db(0xf2); 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(0x7c); db(0x4a); db(0x83); db(0x6b); db(0x00); + db(0xf9); db(0x0c); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); + db(0x03); db(0x8c); 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(0x41); db(0xfa); + db(0xf7); db(0xdc); db(0x20); db(0x08); 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(0x3a); 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(0x70); db(0x00); db(0x4e); db(0x75); + db(0x24); db(0x49); db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); + db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); + db(0x00); db(0x02); 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(0x08); db(0x07); + db(0x00); db(0x01); db(0x67); db(0x5c); db(0x08); db(0x07); db(0x00); db(0x02); + db(0x66); db(0x56); db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); + db(0x4a); db(0x30); db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x3a); db(0x20); db(0x52); + db(0x24); db(0x40); db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); + db(0x13); db(0x7c); db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x09); db(0x3f); + db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); + db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); + db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); + db(0x2c); db(0x01); db(0x7e); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x43); db(0xfa); db(0x09); db(0x3a); db(0x70); db(0x24); db(0x4e); db(0xae); + db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0e); db(0x08); db(0x87); + db(0x00); db(0x02); db(0x43); db(0xfa); db(0x09); db(0x28); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); + db(0x4a); db(0x80); db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0x9c); + db(0x48); db(0xe7); db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfe); db(0x0a); + db(0x4c); db(0xdf); db(0x51); db(0x00); 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(0x22); db(0x48); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); + 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(0x08); db(0x8f); + 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(0x78); db(0x27); db(0x40); db(0x00); db(0xa4); + db(0x61); db(0x00); db(0x02); db(0xa4); db(0x27); db(0x40); db(0x00); db(0xa8); + db(0x7a); db(0x00); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); + db(0x20); db(0x4d); db(0x4e); db(0xae); db(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(0xb2); db(0x70); db(0x00); db(0x4e); db(0x90); + db(0x24); db(0x00); db(0x70); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x48); + db(0x08); db(0x02); db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); + db(0x61); db(0x00); db(0xfb); db(0xb0); db(0x60); db(0x00); db(0x00); db(0xf8); + 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(0xfc); db(0x5c); db(0x42); db(0x2b); + db(0x00); db(0xac); db(0x20); db(0x0c); db(0x67); db(0xd2); 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(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3a); + db(0x20); db(0x6c); db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); + db(0x02); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); + db(0x80); db(0x00); db(0x00); db(0x08); db(0x66); db(0x18); db(0x02); db(0xa8); + db(0x7f); db(0xff); db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); + db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); + db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x8a); db(0x22); db(0x4c); + db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); + db(0xff); db(0x80); db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x3e); + db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x01); db(0x06); + db(0x70); db(0x01); db(0x4e); db(0x90); db(0x45); db(0xeb); db(0x00); db(0x04); + db(0x20); db(0x52); db(0x20); db(0x08); db(0x67); db(0x00); db(0xff); db(0x62); + db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); + db(0x6a); db(0x16); db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x28); db(0x68); + db(0x00); db(0x0a); db(0x61); db(0x4a); db(0x53); db(0x85); db(0x4c); db(0xdf); + db(0x03); db(0x00); db(0x24); db(0x89); db(0x20); db(0x49); db(0x60); db(0xda); + db(0x24); db(0x48); db(0x20); db(0x49); db(0x60); db(0xd4); db(0x0c); db(0x85); + db(0x00); db(0x00); db(0x00); db(0x14); db(0x65); db(0x00); db(0x00); db(0x0a); + db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x04); db(0x60); db(0x12); + db(0x61); db(0x5c); db(0x30); db(0x3c); db(0xff); db(0x30); db(0x61); db(0x00); + db(0x00); db(0xb4); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x0e); + db(0x52); db(0x85); db(0x28); db(0xab); db(0x00); db(0x04); db(0x27); db(0x4c); + db(0x00); db(0x04); db(0x60); db(0x00); db(0xff); db(0x0c); db(0x28); db(0x43); + db(0x61); db(0x04); db(0x60); db(0x00); db(0xff); db(0x04); 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(0xfb); db(0x5c); db(0x0c); db(0xac); db(0x00); db(0x00); + db(0x04); db(0x09); db(0x00); db(0x08); db(0x66); db(0x12); db(0x61); db(0x00); + db(0xfb); db(0x8a); db(0x66); db(0x0c); db(0x30); db(0x3c); db(0xff); db(0x58); + db(0x61); db(0x00); db(0x00); db(0x72); db(0x4e); db(0x90); db(0x60); db(0xee); + 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(0x67); db(0x00); db(0x00); db(0x0c); db(0x52); db(0x85); db(0x67); db(0x1e); + db(0x22); db(0x4a); db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); + db(0x67); db(0x3c); db(0x24); db(0x47); db(0x70); db(0x18); db(0x72); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x52); db(0x46); db(0x24); db(0x40); + db(0x24); db(0x87); db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x20); db(0x12); + db(0x67); db(0x24); db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x1e); + db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x18); db(0x70); db(0x00); + 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(0xf4); db(0x5e); + db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0); + db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90); db(0x42); db(0xa8); + db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x91); db(0xc8); + db(0x24); db(0x00); db(0x6b); db(0x32); db(0x70); db(0x22); db(0x22); db(0x3c); + db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x91); db(0xc8); db(0x24); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x1e); + db(0x15); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x08); db(0x15); db(0x42); + db(0x00); db(0x0f); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); + db(0x25); db(0x40); db(0x00); db(0x10); db(0x41); db(0xea); db(0x00); db(0x14); + db(0x61); db(0x00); db(0xff); db(0xb0); db(0x20); db(0x4a); db(0x20); db(0x08); + db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x20); db(0x24); db(0x40); db(0x74); db(0x30); db(0x20); db(0x02); 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(0x11); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x08); db(0x31); db(0x42); db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x70); db(0x61); db(0x00); - db(0xff); db(0xbc); db(0x67); db(0x1a); db(0x22); db(0x40); db(0x24); db(0x40); - db(0x41); db(0xfa); db(0x02); db(0x44); db(0x70); db(0x00); db(0x72); db(0x00); + db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x74); db(0x61); db(0x00); + db(0xff); db(0xbe); db(0x67); db(0x1a); db(0x22); db(0x40); db(0x24); db(0x40); + db(0x41); db(0xfa); db(0x05); db(0x5c); db(0x70); db(0x00); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x22); db(0x00); db(0x70); db(0x00); db(0x4a); db(0x81); db(0x66); db(0x02); db(0x20); db(0x0a); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); - db(0xff); db(0x3c); db(0x61); db(0x00); db(0xff); db(0x88); db(0x67); db(0x1a); - db(0x24); db(0x40); db(0x22); db(0x40); db(0x41); db(0xfa); db(0x02); db(0x1d); + db(0xff); db(0x40); db(0x61); db(0x00); db(0xff); db(0x8a); db(0x67); db(0x1a); + db(0x24); db(0x40); db(0x22); db(0x40); db(0x41); db(0xfa); db(0x05); db(0x35); db(0x70); db(0x00); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x22); db(0x00); db(0x70); db(0x00); db(0x4a); db(0x81); db(0x66); db(0x02); db(0x20); db(0x0a); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x00); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x79); - db(0x00); db(0x00); db(0x00); db(0x04); db(0x28); db(0x00); db(0x24); db(0x08); - db(0x26); db(0x09); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x08); db(0x5c); - db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x34); - db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x08); - db(0x15); db(0x44); db(0x00); db(0x09); db(0x25); db(0x42); db(0x00); db(0x0a); - db(0x47); db(0xea); db(0x00); db(0x5c); db(0x25); db(0x4b); db(0x00); db(0x3a); - db(0x47); db(0xeb); db(0x08); db(0x00); db(0x25); db(0x4b); db(0x00); db(0x3e); - db(0x25); db(0x4b); db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); - db(0x97); db(0xcb); db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6); - db(0x20); db(0x02); db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75); - db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x2f); db(0x08); - db(0x4a); db(0x2b); db(0x00); db(0x9d); db(0x66); db(0x26); db(0x41); db(0xfa); - db(0xff); db(0xf0); db(0x0c); db(0x10); db(0x00); db(0x01); db(0x66); db(0x1c); - db(0x41); db(0xfa); db(0x01); db(0x96); db(0x43); db(0xfa); db(0x00); db(0x1a); - db(0x70); db(0x05); db(0x61); db(0x00); db(0xff); db(0x7e); db(0x50); db(0xeb); - db(0x00); db(0x9d); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x61); db(0x00); - db(0xfe); db(0x2a); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x4e); db(0x75); - db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff); - db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x74); db(0x00); db(0x01); db(0xc2); - db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x28); db(0x40); - db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0xd4); - db(0x70); db(0x00); db(0x43); db(0xfa); db(0x01); db(0xaa); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x2e); db(0x00); db(0x70); db(0x00); db(0x30); db(0x3c); - db(0x00); db(0x44); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x61); db(0x00); - db(0xfe); db(0xc2); db(0x2b); db(0x40); db(0x00); db(0x3c); db(0x67); db(0x00); - db(0x00); db(0x4e); db(0x61); db(0x00); db(0xfe); db(0xea); db(0x2b); db(0x40); - db(0x00); db(0x40); db(0x67); db(0x00); db(0x00); db(0x42); db(0x47); db(0xed); - db(0x00); db(0x16); db(0x27); db(0x4c); db(0x00); db(0x0c); db(0x27); db(0x42); - db(0x00); db(0x08); db(0x70); db(0xff); db(0x26); db(0x80); db(0x27); db(0x40); - db(0x00); db(0x04); db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c); - db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05); - db(0x00); db(0x09); db(0x41); db(0xfa); db(0x00); db(0xfc); db(0x23); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0xa0); db(0x23); db(0x48); - db(0x00); db(0x12); db(0x23); db(0x4b); db(0x00); db(0x0e); db(0x70); db(0x05); - db(0x4e); db(0xae); db(0xff); db(0x58); db(0x60); db(0x02); db(0x4e); db(0x75); - db(0x20); db(0x02); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x22); db(0x6d); - db(0x00); db(0x3c); db(0x45); db(0xed); db(0x00); db(0x26); db(0x33); db(0x7c); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x28); db(0x00); db(0x24); db(0x08); db(0x26); db(0x09); + db(0x20); db(0x3c); db(0x00); db(0x00); db(0x08); db(0x5c); db(0x22); db(0x3c); + db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x34); db(0x24); db(0x40); + db(0x15); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x08); db(0x15); db(0x44); + db(0x00); db(0x09); db(0x25); db(0x42); db(0x00); db(0x0a); db(0x47); db(0xea); + db(0x00); db(0x5c); db(0x25); db(0x4b); db(0x00); db(0x3a); db(0x47); db(0xeb); + db(0x08); db(0x00); db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b); + db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); + db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); + db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x41); db(0xfa); + db(0x04); db(0xc8); db(0x43); db(0xfa); db(0x01); db(0x1e); db(0x70); db(0x13); + db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); db(0x22); db(0x6d); + db(0x01); db(0x80); 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(0x6d); db(0x01); db(0x80); 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(0x6d); db(0x01); db(0x7c); db(0x13); db(0x7c); + db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x4e); db(0x75); db(0x42); db(0xaa); db(0x00); db(0x0e); db(0x42); db(0xaa); + db(0x00); db(0x12); db(0x22); db(0x6d); db(0x01); db(0x7c); db(0x13); db(0x7c); + db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x4e); db(0x75); db(0x00); db(0x00); db(0xff); db(0xff); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x48); db(0xe7); + db(0xf0); db(0xfe); db(0x2a); db(0x48); db(0x95); db(0xca); db(0x97); db(0xcb); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x20); db(0x6d); db(0x00); db(0x14); + db(0x20); db(0x28); db(0x00); db(0x38); db(0x67); db(0x3e); db(0x20); db(0x40); + db(0x41); db(0xe8); db(0x00); db(0x2c); db(0x4e); db(0xae); db(0xfc); db(0xe8); + db(0x72); db(0xff); db(0xb2); db(0x80); db(0x67); db(0x2e); db(0x26); db(0x00); + db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x28); db(0x70); db(0x00); + db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); + db(0x10); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); + db(0x72); db(0xff); db(0x74); db(0xff); db(0x4a); db(0x80); db(0x6b); db(0x0c); + db(0x45); db(0xed); db(0x00); db(0x28); db(0x22); db(0x2a); db(0x00); db(0x32); + db(0x24); db(0x2a); db(0x00); db(0x36); db(0xb2); db(0xad); db(0x00); db(0x20); + db(0x66); db(0x06); db(0xb4); db(0xad); db(0x00); db(0x24); db(0x67); db(0x34); + db(0x2b); db(0x41); db(0x00); db(0x20); db(0x2b); db(0x42); db(0x00); db(0x24); + db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x80); db(0x70); db(0x00); + db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); + db(0x00); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); + db(0x4a); db(0x80); db(0x6b); db(0x04); db(0x47); db(0xed); db(0x00); db(0x80); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00); + db(0xfd); db(0x84); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x0f); + db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x3e); db(0x2e); + db(0x00); db(0x14); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); + db(0x7c); db(0x00); db(0x01); db(0xc6); db(0x93); db(0xc9); db(0x4e); db(0xae); + db(0xfe); db(0xda); db(0x28); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x70); db(0x00); db(0x30); db(0x3c); + db(0x01); db(0x84); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x47); db(0xed); + db(0x00); db(0x16); db(0x27); db(0x4e); db(0x00); db(0x10); db(0x27); db(0x4c); + db(0x00); db(0x08); db(0x27); db(0x46); db(0x00); db(0x0c); db(0x70); db(0xff); + db(0x37); db(0x40); db(0x00); db(0x00); db(0x43); db(0xed); db(0x00); db(0x00); + db(0x13); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); + db(0x00); db(0x05); db(0x00); db(0x09); db(0x41); db(0xfa); db(0x03); db(0x4a); + db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x02); db(0xf4); + db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4d); db(0x00); db(0x0e); + db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x20); db(0x06); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x70); db(0x00); db(0x53); db(0xab); + db(0x00); db(0x1c); db(0x6a); db(0x06); db(0x70); db(0x0a); db(0x27); db(0x40); + db(0x00); db(0x1c); db(0x4a); db(0xab); db(0x00); db(0x14); db(0x66); db(0x18); + db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xe0); db(0x43); db(0xfa); + db(0x03); db(0x69); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x27); db(0x40); db(0x00); db(0x14); db(0x67); db(0x00); db(0xff); db(0xd0); + db(0x4a); db(0xab); db(0x00); db(0x18); db(0x66); db(0x18); db(0x4a); db(0xab); + db(0x00); db(0x1c); db(0x66); db(0xc2); db(0x43); db(0xfa); db(0x03); db(0x5d); + db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); + db(0x00); db(0x18); db(0x67); db(0x00); db(0xff); db(0xb2); db(0x4a); db(0xad); + db(0x01); db(0x7c); db(0x66); db(0x30); db(0x4a); db(0xab); db(0x00); db(0x1c); + db(0x66); db(0xa4); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); + db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x02); db(0xb2); db(0x4e); db(0xae); + db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); + db(0x4a); db(0x82); db(0x67); db(0x8a); db(0x61); db(0x00); db(0xfd); db(0x2c); + db(0x2b); db(0x40); db(0x01); db(0x7c); db(0x67); db(0x00); db(0x02); db(0x62); + db(0x60); db(0x00); db(0xff); db(0x7c); db(0x4a); db(0xad); db(0x01); db(0x80); + db(0x66); db(0x40); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0x00); + db(0xff); db(0x6e); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); + db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x02); db(0x87); db(0x4e); db(0xae); + db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); + db(0x4a); db(0x82); db(0x67); db(0x00); db(0xff); db(0x52); db(0x61); db(0x00); + db(0xfd); db(0x26); db(0x2b); db(0x40); db(0x01); db(0x80); db(0x67); db(0x00); + db(0x02); db(0x28); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x00); + db(0x61); db(0x00); db(0xfc); db(0x42); db(0x4e); db(0x90); db(0x60); db(0x00); + db(0xff); db(0x36); db(0x0c); db(0x47); db(0x00); db(0x24); db(0x65); db(0x06); + db(0x20); db(0x4b); db(0x61); db(0x00); db(0xfe); db(0x1a); db(0x22); db(0x6d); + db(0x01); db(0x7c); db(0x45); db(0xed); db(0x00); db(0xc6); 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(0x15); db(0x7c); - db(0x00); db(0x04); db(0x00); db(0x04); db(0x42); db(0x2a); db(0x00); db(0x05); - db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); - db(0x20); db(0x47); db(0x20); db(0x2d); db(0x00); db(0x16); db(0x32); db(0x28); - db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x35); db(0x40); - db(0x00); db(0x0a); db(0x20); db(0x2d); db(0x00); db(0x1a); db(0x32); db(0x28); - db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x48); db(0xc0); - db(0x35); db(0x40); db(0x00); db(0x0c); db(0x22); db(0x6d); db(0x00); db(0x40); - 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(0x6d); db(0x00); db(0x40); 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(0x6d); db(0x00); db(0x3c); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x60); db(0x00); db(0xff); db(0x76); db(0x30); db(0x3a); db(0xfe); db(0xa4); - db(0x48); db(0xc0); db(0x32); db(0x3a); db(0xfe); db(0xa0); db(0x48); db(0xc1); - db(0xb0); db(0x91); db(0x66); db(0x00); db(0x00); db(0x0a); db(0xb2); db(0xa9); - db(0x00); db(0x04); db(0x67); db(0x00); db(0x00); db(0x18); db(0x23); db(0x41); - db(0x00); db(0x04); db(0x22); db(0x80); db(0x20); db(0x29); db(0x00); db(0x08); - db(0x22); db(0x69); db(0x00); db(0x0c); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x10); db(0x3a); db(0xfd); db(0xd0); db(0x6a); db(0x0a); db(0x0c); db(0x47); + db(0x00); db(0x24); db(0x64); db(0x04); db(0x60); db(0x00); db(0x01); db(0x9e); + db(0x15); db(0x7c); db(0x00); db(0x13); db(0x00); db(0x04); db(0x42); db(0x6a); + db(0x00); db(0x06); db(0x22); db(0x3a); db(0xfd); db(0xd8); db(0x02); db(0x41); + db(0x00); db(0x07); db(0x70); db(0x07); db(0x90); db(0x41); db(0xe1); db(0x48); + db(0xe9); db(0x48); db(0x35); db(0x40); db(0x00); db(0x08); db(0x41); db(0xed); + db(0x00); db(0xdc); db(0x25); db(0x48); db(0x00); db(0x0a); db(0x0c); db(0x47); + db(0x00); db(0x27); db(0x65); db(0x00); db(0x00); db(0xea); db(0x15); db(0x7c); + db(0x00); db(0x03); db(0x00); db(0x05); db(0x42); db(0x90); db(0x42); db(0xa8); + db(0x00); db(0x04); db(0x42); db(0xa8); db(0x00); db(0x08); db(0x42); db(0x68); + db(0x00); db(0x0c); db(0x31); db(0x7a); db(0xfd); db(0x88); db(0x00); db(0x0e); + db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x7a); db(0xfd); db(0x80); + db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); db(0x31); db(0x7a); + db(0xfd); db(0x6e); db(0x00); db(0x16); db(0x42); db(0x68); db(0x00); db(0x18); + db(0x31); db(0x7a); db(0xfd); db(0x66); db(0x00); db(0x1a); db(0x43); db(0xed); + db(0x00); db(0xfc); db(0x21); db(0x49); db(0x00); db(0x1c); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x06); db(0x30); db(0x3a); db(0xfd); db(0x6c); + db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x07); db(0x22); db(0xfa); db(0xfd); db(0x5e); + db(0x70); db(0x00); db(0x30); db(0x3a); db(0xfd); db(0x46); db(0x6b); db(0x08); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); db(0x22); db(0xc0); + db(0x30); db(0x3a); db(0xfd); db(0x3a); db(0x6b); db(0x08); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfd); db(0x22); db(0x6b); db(0x14); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfd); db(0x1a); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); db(0x22); db(0xc0); + db(0x30); db(0x3a); db(0xfd); db(0x14); db(0x6b); db(0x10); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x3a); db(0xfd); db(0x0e); + db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfd); db(0x00); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x04); db(0x30); db(0x3a); db(0xfc); db(0xfa); db(0x48); db(0xc0); + db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xec); + db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x05); + db(0x30); db(0x3a); db(0xfc); db(0xe6); db(0x48); db(0xc0); db(0xe1); db(0x80); + db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x3a); db(0xfc); db(0xe2); + db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x08); + db(0x22); db(0xc0); db(0x42); db(0x91); db(0x60); db(0x2e); db(0x0c); db(0x47); + db(0x00); db(0x24); db(0x65); db(0x00); db(0xfd); db(0xe2); db(0x15); db(0x7c); + db(0x00); db(0x02); db(0x00); db(0x05); db(0x30); db(0xba); db(0xfc); db(0xa0); + db(0x31); db(0x7a); db(0xfc); db(0x9e); db(0x00); db(0x02); db(0x31); db(0x7a); + db(0xfc); db(0x9c); db(0x00); db(0x04); db(0x31); db(0x7a); db(0xfc); db(0x98); + db(0x00); db(0x06); db(0x30); db(0x3a); db(0xfc); db(0xa6); db(0xe0); db(0x40); + db(0x31); db(0x40); db(0x00); db(0x08); db(0x61); db(0x00); db(0xfc); db(0x64); + db(0x10); db(0x3a); db(0xfc); db(0x78); db(0x6b); db(0x00); db(0xfd); db(0xb0); + db(0x36); db(0x3c); db(0x00); db(0x68); db(0x74); db(0x01); db(0x28); db(0x3a); + db(0xfc); db(0x8c); db(0x20); db(0x04); db(0xc0); db(0x82); db(0x22); db(0x2b); + db(0x00); db(0x04); db(0xc2); db(0x82); db(0xb2); db(0x80); db(0x67); db(0x22); + db(0x42); db(0x92); db(0x35); db(0x7c); db(0x02); db(0x00); db(0x00); db(0x04); + db(0x42); db(0xaa); db(0x00); db(0x0a); db(0x32); db(0x03); db(0x4a); db(0x00); + db(0x66); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x07); db(0x35); db(0x41); + db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); db(0x61); db(0x00); + db(0xfc); db(0x22); db(0x52); db(0x43); db(0xd4); db(0x42); db(0x0c); db(0x42); + db(0x00); db(0x08); db(0x66); db(0xc6); db(0x27); db(0x44); db(0x00); db(0x04); + db(0x60); db(0x00); db(0xfd); db(0x64); db(0x42); db(0x92); db(0x35); db(0x7c); + db(0x04); db(0x00); db(0x00); db(0x04); db(0x42); db(0x6a); db(0x00); db(0x06); + db(0x42); db(0x6a); db(0x00); db(0x08); db(0x20); db(0x6b); db(0x00); db(0x14); + db(0x30); db(0x3a); db(0xfc); db(0x38); db(0x32); db(0x28); db(0x00); db(0x30); + db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); + db(0x35); db(0x40); db(0x00); db(0x0a); db(0x30); db(0x3a); db(0xfc); db(0x26); + db(0x32); db(0x28); db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); + db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0c); + db(0x61); db(0x00); db(0xfb); db(0x9c); db(0x60); db(0x00); db(0xfd); db(0x20); + db(0x4e); db(0x75); db(0x4a); db(0xa9); db(0x01); db(0x7c); db(0x67); db(0x14); + db(0x4a); db(0xa9); db(0x01); db(0x80); db(0x67); db(0x0e); db(0x30); db(0x3a); + db(0xfb); db(0xd4); db(0xb0); db(0x69); db(0x00); db(0x16); db(0x67); db(0x14); + db(0x33); db(0x40); db(0x00); db(0x16); db(0x2c); db(0x69); db(0x00); db(0x26); + db(0x20); db(0x29); db(0x00); db(0x22); db(0x22); db(0x69); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75); db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); - db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); - db(0x65); db(0x20); db(0x68); db(0x61); db(0x63); db(0x6b); db(0x00); db(0x55); - db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); - db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); - db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); - db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); + db(0x55); db(0x41); db(0x45); db(0x20); db(0x74); db(0x61); db(0x62); db(0x6c); + db(0x65); db(0x74); db(0x20); db(0x64); db(0x72); db(0x69); db(0x76); db(0x65); + db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); + db(0x6c); db(0x65); db(0x73); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); - db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); - db(0x73); db(0x00); db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); - db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); - db(0x74); db(0x75); db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); - db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); - db(0x65); db(0x78); db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); - db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); - db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); - db(0x73); db(0x74); db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); - db(0x6f); db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x03); db(0xf2); + db(0x74); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); + db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); + db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); + db(0x63); db(0x65); db(0x73); db(0x73); db(0x00); db(0x64); db(0x6f); db(0x73); + db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); + db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69); db(0x74); db(0x69); + db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); + db(0x72); db(0x79); db(0x00); db(0x67); db(0x72); db(0x61); db(0x70); db(0x68); + db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); + db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); db(0x70); db(0x61); + db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); + db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x46); db(0x69); + db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); + db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); db(0x72); db(0x63); + db(0x65); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2); diff --git a/gfxutil.c b/gfxutil.c index c8b344ff..40303b06 100755 --- a/gfxutil.c +++ b/gfxutil.c @@ -292,7 +292,7 @@ void alloc_colors_rgb (int rw, int gw, int bw, int rs, int gs, int bs, int aw, i int j; if (currprefs.gfx_blackerthanblack) { - j = i * 15 / 16 + 15; + j = i * 15 / 16 + 16; } else { j = i; } diff --git a/hardfile.c b/hardfile.c index 9a7d12f4..f455f022 100755 --- a/hardfile.c +++ b/hardfile.c @@ -760,7 +760,7 @@ static int nodisk (struct hardfiledata *hfd) return 0; } -int scsi_emulate(struct hardfiledata *hfd, struct hd_hardfiledata *hdhfd, uae_u8 *cmdbuf, int scsi_cmd_len, +int scsi_emulate (struct hardfiledata *hfd, struct hd_hardfiledata *hdhfd, uae_u8 *cmdbuf, int scsi_cmd_len, uae_u8 *scsi_data, int *data_len, uae_u8 *r, int *reply_len, uae_u8 *s, int *sense_len) { uae_u64 len, offset; diff --git a/include/cpummu.h b/include/cpummu.h index 25f3e316..1216f869 100755 --- a/include/cpummu.h +++ b/include/cpummu.h @@ -26,6 +26,10 @@ #ifndef CPUMMU_H #define CPUMMU_H +#ifndef FULLMMU +#define FULLMMU +#endif + #define ALWAYS_INLINE __forceinline #define bool int #define DUNUSED(x) diff --git a/include/drawing.h b/include/drawing.h index b84c0277..0ec95ae7 100755 --- a/include/drawing.h +++ b/include/drawing.h @@ -276,6 +276,7 @@ extern void drawing_init (void); extern void notice_interlace_seen (void); extern void frame_drawn (void); extern void redraw_frame (void); +extern int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy); /* Finally, stuff that shouldn't really be shared. */ diff --git a/include/gfxfilter.h b/include/gfxfilter.h index 5dd78237..749f3b3b 100755 --- a/include/gfxfilter.h +++ b/include/gfxfilter.h @@ -72,5 +72,6 @@ extern struct uae_filter *usedfilter; uae_u8 *getfilterrect1 (RECT *sr, RECT *dr, int dst_depth, int aw, int ah, int scale, int temp_width, int temp_height, uae_u8 *dptr, int pitch); void getfilterrect2 (RECT *sr, RECT *dr, int dst_width, int dst_height, int aw, int ah, int scale, int temp_width, int temp_height); +void getfilteroffset (int *dx, int *dy, int *mx, int *my); #endif diff --git a/include/inputdevice.h b/include/inputdevice.h index 65d3de86..0be34ec9 100755 --- a/include/inputdevice.h +++ b/include/inputdevice.h @@ -84,15 +84,11 @@ extern uae_u8 handle_joystick_buttons (uae_u8); extern int getbuttonstate (int joy, int button); extern int getjoystate (int joy); -enum mousestate { mousehack_unknown, mousehack_normal, mousehack_dontcare, mousehack_follow }; - -extern void mousehack_set (enum mousestate); -extern int mousehack_get (void); -extern void mousehack_handle (int sprctl, int sprpos); extern void togglemouse (void); -extern int mousehack_alive (void); -extern int mousehack_allowed (void); extern int magicmouse_alive (void); +extern int is_tablet (void); +extern int inputdevice_is_tablet (void); +extern void input_mousehack_status (int mode, uaecptr a2, uaecptr a3); extern void setmousebuttonstateall (int mouse, uae_u32 buttonbits, uae_u32 buttonmask); extern void setjoybuttonstateall (int joy, uae_u32 buttonbits, uae_u32 buttonmask); @@ -144,6 +140,13 @@ extern void pausemode (int mode); extern void inputdevice_add_inputcode (int code, int state); extern void inputdevice_handle_inputcode (void); +extern void inputdevice_tablet (int x, int y, int z, + int pressure, uae_u32 buttonbits, int inproximity, + int ax, int ay, int az); +extern void inputdevice_tablet_info (int maxx, int maxy, int maxz, int maxax, int maxay, int maxaz, int xres, int yres); +extern void inputdevice_tablet_strobe (void); + + #define JSEM_KBDLAYOUT 0 #define JSEM_JOYS 100 #define JSEM_MICE 200 diff --git a/include/options.h b/include/options.h index cee0059a..221fe46f 100755 --- a/include/options.h +++ b/include/options.h @@ -54,6 +54,10 @@ struct jport { #define CONFIG_TYPE_HOST 2 #define CONFIG_BLEN 2560 +#define TABLET_OFF 0 +#define TABLET_MOUSEHACK 1 +#define TABLET_REAL 2 + struct wh { int x, y; int width, height; @@ -163,7 +167,6 @@ struct uae_prefs { int gfx_resolution; int gfx_lores_mode; int gfx_linedbl; - int gfx_correct_aspect; int gfx_afullscreen, gfx_pfullscreen; int gfx_xcenter, gfx_ycenter; int gfx_xcenter_pos, gfx_ycenter_pos; @@ -185,6 +188,7 @@ struct uae_prefs { int gfx_filter_noise, gfx_filter_blur; int gfx_filter_saturation, gfx_filter_luminance, gfx_filter_contrast, gfx_filter_gamma; int gfx_filter_keep_aspect, gfx_filter_aspect; + int gfx_filter_autoscale; int immediate_blits; unsigned int chipset_mask; @@ -305,7 +309,6 @@ struct uae_prefs { int win32_notaskbarbutton; int win32_alwaysontop; int win32_powersavedisabled; - int win32_outsidemouse; int win32_active_priority; int win32_inactive_priority; @@ -342,6 +345,7 @@ struct uae_prefs { /* input */ + char inputname[256]; struct jport jports[2]; int input_selected_setting; int input_joymouse_multiplier; @@ -352,6 +356,8 @@ struct uae_prefs { int input_analog_joystick_offset; int input_autofire_framecnt; int input_mouse_speed; + int input_tablet; + int input_magic_mouse; struct uae_input_device joystick_settings[MAX_INPUT_SETTINGS + 1][MAX_INPUT_DEVICES]; struct uae_input_device mouse_settings[MAX_INPUT_SETTINGS + 1][MAX_INPUT_DEVICES]; struct uae_input_device keyboard_settings[MAX_INPUT_SETTINGS + 1][MAX_INPUT_DEVICES]; diff --git a/include/xwin.h b/include/xwin.h index 4cf99e16..c494b079 100755 --- a/include/xwin.h +++ b/include/xwin.h @@ -23,6 +23,7 @@ extern void setup_brkhandler (void); extern int isfullscreen (void); extern void toggle_fullscreen (void); extern void toggle_mousegrab (void); +extern void desktop_coords (int *dw, int *dh, int *x, int *y, int *w, int *h); extern void flush_line (int); extern void flush_block (int, int); diff --git a/inprec.c b/inprec.c new file mode 100755 index 00000000..5c40a877 --- /dev/null +++ b/inprec.c @@ -0,0 +1,224 @@ + +static uae_u8 *inprec_buffer, *inprec_p; +static struct zfile *inprec_zf; +static int inprec_size; +int input_recording = 0; +static uae_u8 *inprec_plast, *inprec_plastptr; +static int inprec_div; + +static uae_u32 oldbuttons[4]; +static uae_u16 oldjoy[2]; + +int inprec_open(char *fname, int record) +{ + uae_u32 t = (uae_u32)time(0); + int i; + + inprec_close(); + inprec_zf = zfile_fopen(fname, record > 0 ? "wb" : "rb"); + if (inprec_zf == NULL) + return 0; + inprec_size = 10000; + inprec_div = 1; + if (record < 0) { + uae_u32 id; + zfile_fseek (inprec_zf, 0, SEEK_END); + inprec_size = zfile_ftell (inprec_zf); + zfile_fseek (inprec_zf, 0, SEEK_SET); + inprec_buffer = inprec_p = (uae_u8*)xmalloc (inprec_size); + zfile_fread (inprec_buffer, inprec_size, 1, inprec_zf); + inprec_plastptr = inprec_buffer; + id = inprec_pu32(); + if (id != 'UAE\0') { + inprec_close(); + return 0; + } + inprec_pu32(); + t = inprec_pu32(); + i = inprec_pu32(); + while (i-- > 0) + inprec_pu8(); + inprec_p = inprec_plastptr; + oldbuttons[0] = oldbuttons[1] = oldbuttons[2] = oldbuttons[3] = 0; + oldjoy[0] = oldjoy[1] = 0; + if (record < -1) + inprec_div = maxvpos; + } else if (record > 0) { + inprec_buffer = inprec_p = (uae_u8*)xmalloc (inprec_size); + inprec_ru32('UAE\0'); + inprec_ru8(1); + inprec_ru8(UAEMAJOR); + inprec_ru8(UAEMINOR); + inprec_ru8(UAESUBREV); + inprec_ru32(t); + inprec_ru32(0); // extra header size + } else { + return 0; + } + input_recording = record; + srand(t); + CIA_inprec_prepare(); + write_log ("inprec initialized '%s', mode=%d\n", fname, input_recording); + return 1; +} + +void inprec_close(void) +{ + if (!inprec_zf) + return; + if (inprec_buffer && input_recording > 0) { + hsync_counter++; + inprec_rstart(INPREC_END); + inprec_rend(); + hsync_counter--; + zfile_fwrite (inprec_buffer, inprec_p - inprec_buffer, 1, inprec_zf); + inprec_p = inprec_buffer; + } + zfile_fclose (inprec_zf); + inprec_zf = NULL; + xfree (inprec_buffer); + inprec_buffer = NULL; + input_recording = 0; + write_log ("inprec finished\n"); +} + +void inprec_ru8(uae_u8 v) +{ + *inprec_p++= v; +} +void inprec_ru16(uae_u16 v) +{ + inprec_ru8((uae_u8)(v >> 8)); + inprec_ru8((uae_u8)v); +} +void inprec_ru32(uae_u32 v) +{ + inprec_ru16((uae_u16)(v >> 16)); + inprec_ru16((uae_u16)v); +} +void inprec_rstr(const char *s) +{ + while(*s) { + inprec_ru8(*s); + s++; + } + inprec_ru8(0); +} +void inprec_rstart(uae_u8 type) +{ + write_log ("INPREC: %08X: %d\n", hsync_counter, type); + inprec_ru32(hsync_counter); + inprec_ru8(0); + inprec_plast = inprec_p; + inprec_ru8(0xff); + inprec_ru8(type); +} +void inprec_rend(void) +{ + *inprec_plast = inprec_p - (inprec_plast + 2); + if (inprec_p >= inprec_buffer + inprec_size - 256) { + zfile_fwrite (inprec_buffer, inprec_p - inprec_buffer, 1, inprec_zf); + inprec_p = inprec_buffer; + } +} + +int inprec_pstart(uae_u8 type) +{ + uae_u8 *p = inprec_p; + uae_u32 hc = hsync_counter; + static uae_u8 *lastp; + uae_u32 hc_orig, hc2_orig; + + if (savestate_state) + return 0; + if (p[5 + 1] == INPREC_END) { + inprec_close(); + return 0; + } + hc_orig = hc; + hc /= inprec_div; + hc *= inprec_div; + for (;;) { + uae_u32 hc2 = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; + if (p > lastp) { + write_log ("INPREC: Next %08x (%08x=%d): %d (%d)\n", hc2, hc, hc2 - hc, p[5 + 1], p[5]); + lastp = p; + } + hc2_orig = hc2; + hc2 /= inprec_div; + hc2 *= inprec_div; + if (hc > hc2) { + write_log ("INPREC: %08x > %08x: %d (%d) missed!\n", hc, hc2, p[5 + 1], p[5]); + inprec_close(); + return 0; + } + if (hc2 != hc) { + lastp = p; + break; + } + if (p[5 + 1] == type) { + write_log ("INPREC: %08x: %d (%d) (%+d)\n", hc, type, p[5], hc_orig - hc2_orig); + inprec_plast = p; + inprec_plastptr = p + 5 + 2; + return 1; + } + p += 5 + 2 + p[5]; + } + inprec_plast = NULL; + return 0; +} +void inprec_pend(void) +{ + uae_u8 *p = inprec_p; + uae_u32 hc = hsync_counter; + + if (!inprec_plast) + return; + inprec_plast[5 + 1] = 0; + inprec_plast = NULL; + inprec_plastptr = NULL; + hc /= inprec_div; + hc *= inprec_div; + for (;;) { + uae_u32 hc2 = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; + hc2 /= inprec_div; + hc2 *= inprec_div; + if (hc2 != hc) + break; + if (p[5 + 1] != 0) + return; + p += 5 + 2 + p[5]; + } + inprec_p = p; + if (p[5 + 1] == INPREC_END) + inprec_close(); +} + +uae_u8 inprec_pu8(void) +{ + return *inprec_plastptr++; +} +uae_u16 inprec_pu16(void) +{ + uae_u16 v = inprec_pu8() << 8; + v |= inprec_pu8(); + return v; +} +uae_u32 inprec_pu32(void) +{ + uae_u32 v = inprec_pu16() << 16; + v |= inprec_pu16(); + return v; +} +int inprec_pstr(char *s) +{ + int len = 0; + for(;;) { + uae_u8 v = inprec_pu8(); + *s++ = v; + if (!v) + break; + len++; + } + return len; +} diff --git a/inputdevice.c b/inputdevice.c index f2538af4..7ae6764d 100755 --- a/inputdevice.c +++ b/inputdevice.c @@ -47,6 +47,12 @@ #include "autoconf.h" #include "rp.h" +// 01 = host events +// 02 = joystick +// 04 = cia buttons +// 16 = potgo +// 32 = vsync + int inputdevice_logging = 0; #define DIR_LEFT 1 @@ -825,12 +831,13 @@ void read_inputdevice_config (struct uae_prefs *pr, char *option, char *value) xfree (custom); } -static int ievent_alive, mouseedge_alive; +static int mouseedge_alive; static int lastmx, lastmy; -static uae_u32 magicmouse_ibase = 0; -#define intui "intuition.library" +static uaecptr magicmouse_ibase, magicmouse_gfxbase; +static int dimensioninfo_width, dimensioninfo_height, dimensioninfo_dbl; +static int tablet_maxx, tablet_maxy, tablet_data; -static uaecptr get_intuitionbase (void) +static uaecptr get_base (const char *name) { uaecptr v = get_long (4); addrbank *b = &get_mem_bank(v); @@ -842,62 +849,413 @@ static uaecptr get_intuitionbase (void) uae_u32 v2; uae_u8 *p; b = &get_mem_bank(v); - if (!b || !b->check (v, 32) || b->flags != ABFLAG_RAM) { - magicmouse_ibase = 0xffffffff; - return 0; - } + if (!b || !b->check (v, 32) || b->flags != ABFLAG_RAM) + return 0xffffffff; v2 = get_long (v + 10); // name b = &get_mem_bank(v2); - if (!b || !b->check (v2, 20)) { - magicmouse_ibase = 0xffffffff; - return 0; - } + if (!b || !b->check (v2, 20)) + return 0xffffffff; if (b->flags != ABFLAG_ROM && b->flags != ABFLAG_RAM) return 0; p = b->xlateaddr(v2); - if (!memcmp(p, intui, strlen(intui) + 1)) + if (!memcmp(p, name, strlen(name) + 1)) return v; } return 0; } -static void mousehack_enable (void) +static uaecptr get_intuitionbase (void) +{ + if (magicmouse_ibase == 0xffffffff) + return 0; + if (magicmouse_ibase) + return magicmouse_ibase; + magicmouse_ibase = get_base ("intuition.library"); + return magicmouse_ibase; +} +static uaecptr get_gfxbase (void) +{ + if (magicmouse_gfxbase == 0xffffffff) + return 0; + if (magicmouse_gfxbase) + return magicmouse_gfxbase; + magicmouse_gfxbase = get_base ("graphics.library"); + return magicmouse_gfxbase; +} + +#define MH_E 0 +#define MH_CNT 2 +#define MH_MAXX 4 +#define MH_MAXY 6 +#define MH_MAXZ 8 +#define MH_X 10 +#define MH_Y 12 +#define MH_Z 14 +#define MH_RESX 16 +#define MH_RESY 18 +#define MH_MAXAX 20 +#define MH_MAXAY 22 +#define MH_MAXAZ 24 +#define MH_AX 26 +#define MH_AY 28 +#define MH_AZ 30 +#define MH_PRESSURE 32 +#define MH_BUTTONBITS 34 +#define MH_INPROXIMITY 38 +#define MH_ABSX 40 +#define MH_ABSY 42 + +#define MH_END 44 +#define MH_START 4 + +int inputdevice_is_tablet (void) +{ + int v; + if (!uae_boot_rom) + return 0; + if (currprefs.input_tablet == TABLET_OFF) + return 0; + if (currprefs.input_tablet == TABLET_MOUSEHACK) + return -1; + v = is_tablet (); + if (!v) + return 0; + if (kickstart_version < 37) + return v ? -1 : 0; + return v ? 1 : 0; +} + +static void mousehack_reset (void) { int off; + + dimensioninfo_width = 0; + dimensioninfo_height = 0; + dimensioninfo_dbl = 0; + tablet_data = 0; if (!uae_boot_rom) return; - off = get_long (rtarea_base + 40); - if (rtarea[off + 12 - 2] == 0xff) + off = 12 + get_long (rtarea_base + 36); + rtarea[off + MH_E] = 0; +} + +static void mousehack_enable (void) +{ + int off, mode; + + if (!uae_boot_rom || currprefs.input_tablet == TABLET_OFF) + return; + off = 12 + get_long (rtarea_base + 36); + if (rtarea[off + MH_E]) return; - rtarea[off + 12 - 2] = 1; + mode = 1; + if (inputdevice_is_tablet () < 0) + mode |= 0x80; + write_log ("Tablet driver enabled (%s)\n", (mode & 0x80) ? "mousehack" : "real"); + rtarea[off + MH_E] = mode; +} + +void input_mousehack_status (int mode, uaecptr a2, uaecptr a3) +{ + if (mode == 0) { + uae_u8 v = rtarea[12 + get_long (rtarea_base + 36)]; + v |= 2; + rtarea[12 + get_long (rtarea_base + 36)] = v; + write_log ("Tablet driver running (%02x)\n", v); + } else if (mode == 1) { + int x1 = -1, y1 = -1, x2 = -1, y2 = -1; + uae_u32 props = 0; + dimensioninfo_width = -1; + dimensioninfo_height = -1; + if (a2) { + x1 = get_word (a2 + 50); + y1 = get_word (a2 + 52); + x2 = get_word (a2 + 54); + y2 = get_word (a2 + 56); + dimensioninfo_width = x2 - x1 + 1; + dimensioninfo_height = y2 - y1 + 1; + } + if (a3) + props = get_long (a3 + 18); + dimensioninfo_dbl = (props & 0x00020000) ? 1 : 0; + write_log ("%08x %dx%d %dx%d %s\n", props, x1, y1, x2, y2, + (props & 0x00020000) ? "dbl" : ""); + } } -static void mousehack_setpos (int mousexpos, int mouseypos) +void get_custom_mouse_limits (int *w, int *h, int *dx, int *dy, int dbl); + +void inputdevice_tablet_strobe (void) { uae_u8 *p; + uae_u32 off; + mousehack_enable (); if (!uae_boot_rom) return; - p = rtarea + get_long (rtarea_base + 40) + 12; - p[0] = mousexpos >> 8; - p[1] = mousexpos; - p[2] = mouseypos >> 8; - p[3] = mouseypos; - //write_log ("%dx%d\n", mousexpos, mouseypos); + if (!tablet_data) + return; + off = 12 + get_long (rtarea_base + 36); + p = rtarea + off; + p[MH_CNT]++; } -static int mouseedge_x, mouseedge_y, mouseedge_time; -#define MOUSEEDGE_RANGE 300 -#define MOUSEEDGE_TIME 2 +void inputdevice_tablet (int x, int y, int z, int pressure, uae_u32 buttonbits, int inproximity, int ax, int ay, int az) +{ + uae_u8 *p; + uae_u8 tmp[MH_END]; + uae_u32 off; + + mousehack_enable (); + if (inputdevice_is_tablet () <= 0) + return; + //write_log ("%d %d %d %d %08X %d %d %d %d\n", x, y, z, pressure, buttonbits, inproximity, ax, ay, az); + off = 12 + get_long (rtarea_base + 36); + p = rtarea + off; + + memcpy (tmp, p + MH_START, MH_END - MH_START); +#if 0 + if (currprefs.input_magic_mouse) { + int maxx, maxy, diffx, diffy; + int dw, dh, ax, ay, aw, ah; + float xmult, ymult; + float fx, fy; + + fx = (float)x; + fy = (float)y; + desktop_coords (&dw, &dh, &ax, &ay, &aw, &ah); + xmult = (float)tablet_maxx / dw; + ymult = (float)tablet_maxy / dh; + + diffx = 0; + diffy = 0; + if (picasso_on) { + maxx = gfxvidinfo.width; + maxy = gfxvidinfo.height; + } else { + get_custom_mouse_limits (&maxx, &maxy, &diffx, &diffy); + } + diffx += ax; + diffy += ah; + + fx -= diffx * xmult; + if (fx < 0) + fx = 0; + if (fx >= aw * xmult) + fx = aw * xmult - 1; + fy -= diffy * ymult; + if (fy < 0) + fy = 0; + if (fy >= ah * ymult) + fy = ah * ymult - 1; + + x = (int)(fx * (aw * xmult) / tablet_maxx + 0.5); + y = (int)(fy * (ah * ymult) / tablet_maxy + 0.5); + + } +#endif + p[MH_X] = x >> 8; + p[MH_X + 1] = x; + p[MH_Y] = y >> 8; + p[MH_Y + 1] = y; + p[MH_Z] = z >> 8; + p[MH_Z + 1] = z; + + p[MH_AX] = ax >> 8; + p[MH_AX + 1] = ax; + p[MH_AY] = ay >> 8; + p[MH_AY + 1] = ay; + p[MH_AZ] = az >> 8; + p[MH_AZ + 1] = az; + + p[MH_MAXX] = tablet_maxx >> 8; + p[MH_MAXX + 1] = tablet_maxx; + p[MH_MAXY] = tablet_maxy >> 8; + p[MH_MAXY + 1] = tablet_maxy; + + p[MH_PRESSURE] = pressure >> 8; + p[MH_PRESSURE + 1] = pressure; + + p[MH_BUTTONBITS + 0] = buttonbits >> 24; + p[MH_BUTTONBITS + 1] = buttonbits >> 16; + p[MH_BUTTONBITS + 2] = buttonbits >> 8; + p[MH_BUTTONBITS + 3] = buttonbits >> 0; + + if (inproximity < 0) { + p[MH_INPROXIMITY] = p[MH_INPROXIMITY + 1] = 0xff; + } else { + p[MH_INPROXIMITY] = 0; + p[MH_INPROXIMITY + 1] = inproximity ? 1 : 0; + } + + if (!memcmp (tmp, p + MH_START, MH_END - MH_START)) + return; + p[MH_CNT]++; +} + +void inputdevice_tablet_info (int maxx, int maxy, int maxz, int maxax, int maxay, int maxaz, int xres, int yres) +{ + uae_u8 *p; + + if (!uae_boot_rom) + return; + p = rtarea + 12 + get_long (rtarea_base + 36); + + tablet_maxx = maxx; + tablet_maxy = maxy; + p[MH_MAXX] = maxx >> 8; + p[MH_MAXX + 1] = maxx; + p[MH_MAXY] = maxy >> 8; + p[MH_MAXY + 1] = maxy; + p[MH_MAXZ] = maxz >> 8; + p[MH_MAXZ + 1] = maxz; + + p[MH_RESX] = xres >> 8; + p[MH_RESX + 1] = xres; + p[MH_RESY] = yres >> 8; + p[MH_RESY + 1] = yres; -void setamigamouse (int x, int y) + p[MH_MAXAX] = maxax >> 8; + p[MH_MAXAX + 1] = maxax; + p[MH_MAXAY] = maxay >> 8; + p[MH_MAXAY + 1] = maxay; + p[MH_MAXAZ] = maxaz >> 8; + p[MH_MAXAZ + 1] = maxaz; +} + +static void inputdevice_tablet_abs (int x, int y) +{ + uae_u8 *p; + uae_u8 tmp[4]; + uae_u32 off; + + mousehack_enable (); + off = 12 + get_long (rtarea_base + 36); + p = rtarea + off; + + memcpy (tmp, p + MH_ABSX, 4); + + p[MH_ABSX] = x >> 8; + p[MH_ABSX + 1] = x; + p[MH_ABSY] = y >> 8; + p[MH_ABSY + 1] = y; + + if (!memcmp (tmp, p + MH_ABSX, 4)) + return; + p[MH_CNT]++; + tablet_data = 1; +} + +void getgfxoffset (int *dx, int *dy, int*,int*); +static void inputdevice_tablet_abs_v36 (int x, int y) { + uae_u8 *p; + uae_u8 tmp[MH_END]; + uae_u32 off; + int maxx, maxy, diffx, diffy; + int fdy, fdx, fmx, fmy; + mousehack_enable (); - mousehack_setpos (x, y); + off = 12 + get_long (rtarea_base + 36); + p = rtarea + off; + + memcpy (tmp, p + MH_START, MH_END - MH_START); + + getgfxoffset (&fdx, &fdy, &fmx, &fmy); + x -= fdx; + y -= fdy; + + diffx = diffy = 0; + maxx = maxy = 0; + if (picasso_on) { + maxx = picasso96_state.Width; + maxy = picasso96_state.Height; + } else if (dimensioninfo_width > 0 && dimensioninfo_height > 0) { + maxx = dimensioninfo_width; + maxy = dimensioninfo_height; + get_custom_mouse_limits (&maxx, &maxy, &diffx, &diffy, dimensioninfo_dbl); + } else { + uaecptr gb = get_gfxbase (); + maxx = 0; maxy = 0; + if (gb) { + maxy = get_word (gb + 216); + maxx = get_word (gb + 218); + } + get_custom_mouse_limits (&maxx, &maxy, &diffx, &diffy, 0); + } + maxx = maxx * 1000 / fmx; + maxy = maxy * 1000 / fmy; + + if (maxx <= 0) + maxx = 1; + if (maxy <= 0) + maxy = 1; + + x -= diffx; + if (x < 0) + x = 0; + if (x >= maxx) + x = maxx - 1; + + y -= diffy; + if (y < 0) + y = 0; + if (y >= maxy) + y = maxy - 1; + + //write_log ("%d %d %d %d\n", x, y, maxx, maxy); + + p[MH_X] = x >> 8; + p[MH_X + 1] = x; + p[MH_Y] = y >> 8; + p[MH_Y + 1] = y; + p[MH_MAXX] = maxx >> 8; + p[MH_MAXX + 1] = maxx; + p[MH_MAXY] = maxy >> 8; + p[MH_MAXY + 1] = maxy; + + p[MH_Z] = p[MH_Z + 1] = 0; + p[MH_MAXZ] = p[MH_MAXZ + 1] = 0; + p[MH_AX] = p[MH_AX + 1] = 0; + p[MH_AY] = p[MH_AY + 1] = 0; + p[MH_AZ] = p[MH_AZ + 1] = 0; + p[MH_PRESSURE] = p[MH_PRESSURE + 1] = 0; + p[MH_INPROXIMITY] = p[MH_INPROXIMITY + 1] = 0xff; + + if (!memcmp (tmp, p + MH_START, MH_END - MH_START)) + return; + p[MH_CNT]++; + tablet_data = 1; +} + +static void mousehack_helper (void) +{ + int x, y; + + if (currprefs.input_magic_mouse == 0 || currprefs.input_tablet == 0) + return; + if (kickstart_version >= 36) { + inputdevice_tablet_abs_v36 (lastmx, lastmy); + return; + } +#ifdef PICASSO96 + if (picasso_on) { + x = lastmx - picasso96_state.XOffset; + y = lastmy - picasso96_state.YOffset; + } else +#endif + { + x = coord_native_to_amiga_x (lastmx); + y = coord_native_to_amiga_y (lastmy) << 1; + } + inputdevice_tablet_abs (x, y); } +static int mouseedge_x, mouseedge_y, mouseedge_time; +#define MOUSEEDGE_RANGE 100 +#define MOUSEEDGE_TIME 2 + extern void setmouseactivexy (int,int,int); -extern void drawing_adjust_mousepos (int*,int*); static int mouseedge (void) { @@ -906,17 +1264,16 @@ static int mouseedge (void) static int melast_x, melast_y; static int isnonzero; - if (!currprefs.win32_outsidemouse || magicmouse_ibase == 0xffffffff) + if (currprefs.input_magic_mouse == 0 || currprefs.input_tablet > 0) + return 0; + if (magicmouse_ibase == 0xffffffff) return 0; dir = 0; if (!mouseedge_time) { isnonzero = 0; goto end; } - if (magicmouse_ibase == 0) - ib = get_intuitionbase(); - else - ib = magicmouse_ibase; + ib = get_intuitionbase (); if (!ib) return 0; x = get_word (ib + 70); @@ -961,7 +1318,10 @@ end: mouseedge_time = 0; if (dir) { if (!picasso_on) { - drawing_adjust_mousepos (&x, &y); + int aw = 0, ah = 0, dx, dy; + get_custom_mouse_limits (&aw, &ah, &dx, &dy, dimensioninfo_dbl); + x += dx; + y += dy; } if (!dmaen(DMA_SPRITE)) setmouseactivexy (x, y, 0); @@ -971,35 +1331,11 @@ end: return 1; } -int mousehack_alive (void) -{ - return ievent_alive > 0; -} - int magicmouse_alive (void) { return mouseedge_alive > 0; } -static void mousehack_helper (void) -{ - int mousexpos, mouseypos; - - if (!mousehack_allowed ()) - return; -#ifdef PICASSO96 - if (picasso_on) { - mousexpos = lastmx - picasso96_state.XOffset; - mouseypos = lastmy - picasso96_state.YOffset; - } else -#endif - { - mousexpos = coord_native_to_amiga_x (lastmx); - mouseypos = coord_native_to_amiga_y (lastmy) << 1; - } - mousehack_setpos (mousexpos, mouseypos); -} - STATIC_INLINE int adjust (int val) { if (val > 127) @@ -1343,7 +1679,6 @@ static void cap_check (void) } } - uae_u8 handle_joystick_buttons (uae_u8 dra) { uae_u8 but = 0; @@ -2049,8 +2384,6 @@ void inputdevice_vsync (void) inputdelay = uaerand () % (maxvpos <= 1 ? 1 : maxvpos - 1); inputdevice_handle_inputcode (); - if (ievent_alive > 0) - ievent_alive--; if (mouseedge_alive > 0) mouseedge_alive--; #ifdef ARCADIA @@ -2059,13 +2392,17 @@ void inputdevice_vsync (void) #endif if (mouseedge ()) mouseedge_alive = 10; + inputdevice_checkconfig (); } void inputdevice_reset (void) { - ievent_alive = 0; magicmouse_ibase = 0; + magicmouse_gfxbase = 0; + mousehack_reset (); + if (inputdevice_is_tablet ()) + mousehack_enable (); } static int getoldport (struct uae_input_device *id) @@ -2669,8 +3006,6 @@ void inputdevice_updateconfig (struct uae_prefs *prefs) cd32_pad_enabled[1] = 1; #endif - if (mousehack_allowed ()) - mousehack_enable (); } /* called when devices get inserted or removed */ @@ -3456,8 +3791,17 @@ void setmousestate (int mouse, int axis, int data, int isabs) testrecord (IDTYPE_MOUSE, mouse, IDEV_WIDGET_AXIS, axis, data); return; } - if (!mice[mouse].enabled) + if (!mice[mouse].enabled) { + if (isabs && currprefs.input_tablet > 0) { + if (axis == 0) + lastmx = data; + else + lastmy = data; + if (axis) + mousehack_helper (); + } return; + } d = 0; mouse_p = &mouse_axis[mouse][axis]; oldm_p = &oldm_axis[mouse][axis]; @@ -3473,6 +3817,10 @@ void setmousestate (int mouse, int axis, int data, int isabs) lastmx = data; else lastmy = data; + if (axis) + mousehack_helper (); + if (currprefs.input_tablet == TABLET_MOUSEHACK) + return; } v = (int)(d > 0 ? d + 0.5 : d - 0.5); fract1[mouse][axis] += d; @@ -3484,7 +3832,6 @@ void setmousestate (int mouse, int axis, int data, int isabs) } for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) handle_input_event (id->eventid[ID_AXIS_OFFSET + axis][i], v, 0, 0); - mousehack_helper (); } int getmousestate (int joy) { @@ -3508,7 +3855,7 @@ void warpmode (int mode) if (turbo_emulation) { changed_prefs.gfx_framerate = currprefs.gfx_framerate = fr2; turbo_emulation = 0; - } else { + } else { turbo_emulation = fr; } } else if (mode == 0 && turbo_emulation > 0) { diff --git a/main.c b/main.c index 6496946d..eb1888ca 100755 --- a/main.c +++ b/main.c @@ -126,6 +126,17 @@ void fixup_prefs_dimensions (struct uae_prefs *prefs) { fixup_prefs_dim2 (&prefs->gfx_size_fs); fixup_prefs_dim2 (&prefs->gfx_size_win); + if (prefs->gfx_filter == 0) { + prefs->gfx_filter = 1; + prefs->gfx_filter_horiz_zoom = 0; + prefs->gfx_filter_vert_zoom = 0; + prefs->gfx_filtershader[0] = 0; + prefs->gfx_filter_horiz_zoom_mult = 0; + prefs->gfx_filter_vert_zoom_mult = 0; + prefs->gfx_filter_filtermode = 0; + prefs->gfx_filter_autoscale = 1; + prefs->gfx_filter_keep_aspect = 0; + } } void fixup_cpu (struct uae_prefs *p) diff --git a/memory.c b/memory.c index 94c38010..f5277b51 100755 --- a/memory.c +++ b/memory.c @@ -1783,6 +1783,8 @@ static void a1000_handle_kickstart (int mode) memcpy (kickmemory, a1000_bootrom, 262144); kickstart_version = 0; } + if (kickstart_version == 0xffff) + kickstart_version = 0; } void a1000_reset (void) @@ -2434,6 +2436,20 @@ static void byteswap (uae_u8 *buf, int size) buf[i + 1] = t; } } +static void wordbyteswap (uae_u8 *buf, int size) +{ + int i; + for (i = 0; i < size; i += 4) { + uae_u8 t; + t = buf[i + 0]; + buf[i + 0] = buf[i + 2]; + buf[i + 2] = t; + t = buf[i + 1]; + buf[i + 1] = buf[i + 3]; + buf[i + 3] = t; + } +} + static void mergecd32 (uae_u8 *dst, uae_u8 *src, int size) { int i, k; @@ -2487,15 +2503,17 @@ struct zfile *read_rom (struct romdata **prd) crc32 = rd2->crc32; name = rd->name; buf = xmalloc (size * 2); + memset (buf, 0xff, size * 2); if (!buf) return NULL; buf2 = buf + size; while (rd->id == id) { - int i; + int i, j, add; int ok = 0; uae_u32 flags = rd->type; int odd = (flags & ROMTYPE_ODD) ? 1 : 0; + add = 0; for (i = 0; i < 2; i++) { memset (buf, 0, size); if (!(flags & (ROMTYPE_EVEN | ROMTYPE_ODD))) { @@ -2504,27 +2522,48 @@ struct zfile *read_rom (struct romdata **prd) memcpy (buf2, buf, size); mergecd32 (buf, buf2, size); } - rd++; + add = 1; i++; } else { int romsize = size / 2; if (i) odd = !odd; - read_rom_file (buf2, rd); - if (flags & ROMTYPE_BYTESWAP) - byteswap (buf2, romsize); - if (flags & ROMTYPE_SCRAMBLED) - descramble (rd, buf2, romsize, odd); - for (i = 0; i < size; i += 2) - buf[i + odd] = buf2[i / 2]; - read_rom_file (buf2, rd + 1); - if (flags & ROMTYPE_BYTESWAP) - byteswap (buf2, romsize); - if (flags & ROMTYPE_SCRAMBLED) - descramble (rd + 1, buf2, romsize, !odd); - for (i = 0; i < size; i += 2) - buf[i + (1 - odd)] = buf2[i / 2]; - rd += 2; + if (flags & ROMTYPE_8BIT) { + read_rom_file (buf2, rd); + if (flags & ROMTYPE_BYTESWAP) + byteswap (buf2, romsize); + if (flags & ROMTYPE_SCRAMBLED) + descramble (rd, buf2, romsize, odd); + for (j = 0; j < size; j += 2) + buf[j + odd] = buf2[j / 2]; + read_rom_file (buf2, rd + 1); + if (flags & ROMTYPE_BYTESWAP) + byteswap (buf2, romsize); + if (flags & ROMTYPE_SCRAMBLED) + descramble (rd + 1, buf2, romsize, !odd); + for (j = 0; j < size; j += 2) + buf[j + (1 - odd)] = buf2[j / 2]; + } else { + read_rom_file (buf2, rd); + if (flags & ROMTYPE_BYTESWAP) + byteswap (buf2, romsize); + if (flags & ROMTYPE_SCRAMBLED) + descramble (rd, buf2, romsize, odd); + for (j = 0; j < size; j += 4) { + buf[j + 2 * odd + 0] = buf2[j / 2 + 0]; + buf[j + 2 * odd + 1] = buf2[j / 2 + 1]; + } + read_rom_file (buf2, rd + 1); + if (flags & ROMTYPE_BYTESWAP) + byteswap (buf2, romsize); + if (flags & ROMTYPE_SCRAMBLED) + descramble (rd + 1, buf2, romsize, !odd); + for (j = 0; j < size; j += 4) { + buf[j + 2 * (1 - odd) + 0] = buf2[j / 2 + 0]; + buf[j + 2 * (1 - odd) + 1] = buf2[j / 2 + 1]; + } + } + add = 2; } if (get_crc32 (buf, size) == crc32) { ok = 1; @@ -2544,6 +2583,7 @@ struct zfile *read_rom (struct romdata **prd) return zf; } } + rd += add; } xfree (buf); @@ -2914,6 +2954,8 @@ static int load_kickstart (void) #endif kickstart_version = (kickmemory[12] << 8) | kickmemory[13]; + if (kickstart_version == 0xffff) + kickstart_version = 0; zfile_fclose (f); return 1; err: diff --git a/newcpu.c b/newcpu.c index 59153032..27e01343 100755 --- a/newcpu.c +++ b/newcpu.c @@ -18,6 +18,7 @@ #include "memory.h" #include "custom.h" #include "newcpu.h" +#include "cpummu.h" #include "cpu_prefetch.h" #include "autoconf.h" #include "traps.h" @@ -870,6 +871,8 @@ void REGPARAM2 MakeFromSR (struct regstruct *regs) } } } + if (currprefs.mmu_model) + mmu_set_super (regs->s); doint (); if (regs->t1 || regs->t0) @@ -1028,6 +1031,8 @@ static void Exception_normal (int nr, struct regstruct *regs, uaecptr oldpc) else m68k_areg (regs, 7) = regs->isp; regs->s = 1; + if (currprefs.mmu_model) + mmu_set_super (regs->s); } if (currprefs.cpu_model > 68000) { if (nr == 2 || nr == 3) { @@ -1243,7 +1248,10 @@ int m68k_move2c (int regno, uae_u32 *regp) } break; /* 68040/060 only */ - case 3: regs.tcr = *regp & (currprefs.cpu_model == 68060 ? 0xfffe : 0xc000); + case 3: + regs.tcr = *regp & (currprefs.cpu_model == 68060 ? 0xfffe : 0xc000); + if (currprefs.mmu_model) + mmu_set_tc (regs.tcr); break; /* no differences between 68040 and 68060 */ @@ -1634,6 +1642,9 @@ void m68k_reset (int hardreset) regs.itt0 = regs.itt1 = regs.dtt0 = regs.dtt1 = 0; regs.tcr = regs.mmusr = regs.urp = regs.srp = regs.buscr = 0; + if (currprefs.mmu_model) + mmu_reset (); + a3000_fakekick (0); /* only (E)nable bit is zeroed when CPU is reset, A3000 SuperKickstart expects this */ tc_030 &= ~0x80000000; @@ -1892,6 +1903,10 @@ void mmu_op (uae_u32 opcode, struct regstruct *regs, uae_u32 extra) #if MMUOP_DEBUG > 1 write_log ("mmu_op %04X PC=%08X\n", opcode, m68k_getpc (regs)); #endif + if (currprefs.cpu_model) { + mmu_op_real (opcode, extra); + return; + } if ((opcode & 0xFE0) == 0x0500) { /* PFLUSH */ regs->mmusr = 0; diff --git a/od-win32/avioutput.c b/od-win32/avioutput.c index 43060e7b..96b7317a 100755 --- a/od-win32/avioutput.c +++ b/od-win32/avioutput.c @@ -20,6 +20,9 @@ #include "sysconfig.h" #include "sysdeps.h" + +#include "resource" + #include "options.h" #include "audio.h" #include "custom.h" @@ -34,7 +37,6 @@ #include "sound.h" #include "gfxfilter.h" #include "xwin.h" -#include "resource.h" #include "avioutput.h" #include "registry.h" #include "threaddep/thread.h" diff --git a/od-win32/bsdsock.c b/od-win32/bsdsock.c index a93d4449..0b1681a1 100755 --- a/od-win32/bsdsock.c +++ b/od-win32/bsdsock.c @@ -14,6 +14,8 @@ #if defined(BSDSOCKET) +#include "resource" + #include #include #include @@ -30,7 +32,6 @@ #include "threaddep/thread.h" #include "registry.h" #include "native2amiga.h" -#include "resource.h" #include "win32gui.h" #include "wininet.h" #include "mmsystem.h" diff --git a/od-win32/debug_win32.c b/od-win32/debug_win32.c index ccfeaf3c..e56e5ffa 100755 --- a/od-win32/debug_win32.c +++ b/od-win32/debug_win32.c @@ -14,7 +14,9 @@ #include #include #include -#include "resource.h" + +#include "resource" + #include "options.h" #include "memory.h" #include "custom.h" diff --git a/od-win32/dinput.c b/od-win32/dinput.c index 6e90b6e5..f7fbe0e9 100755 --- a/od-win32/dinput.c +++ b/od-win32/dinput.c @@ -42,6 +42,9 @@ #include #include +#include +#include "wintablet.h" + #include "win32.h" #define MAX_MAPPINGS 256 @@ -359,7 +362,180 @@ static int keyhack (int scancode, int pressed, int num) return scancode; } -static int initialize_catweasel(void) +static int tablet; +static int axmax, aymax, azmax; +static int xmax, ymax, zmax; +static int xres, yres; +static int maxpres; +static char *tabletname; +static int tablet_x, tablet_y, tablet_z, tablet_pressure, tablet_buttons, tablet_proximity; +static int tablet_ax, tablet_ay, tablet_az, tablet_flags; + +static void tablet_send (void) +{ + static int eraser; + + if ((tablet_flags & TPS_INVERT) && tablet_pressure > 0) { + tablet_buttons |= 2; + eraser = 1; + } else if (eraser) { + tablet_buttons &= ~2; + eraser = 0; + } + if (tablet_x < 0) + return; + inputdevice_tablet (tablet_x, tablet_y, tablet_z, tablet_pressure, tablet_buttons, tablet_proximity, + tablet_ax, tablet_ay, tablet_az); +} + +void send_tablet_proximity (int inproxi) +{ + if (tablet_proximity == inproxi) + return; + tablet_proximity = inproxi; + if (!tablet_proximity) { + tablet_flags &= ~TPS_INVERT; + } + tablet_send (); +} + +void send_tablet (int x, int y, int z, int pres, uae_u32 buttons, int flags, int ax, int ay, int az, int rx, int ry, int rz, RECT *r) +{ + //write_log ("%d %d %d (%d,%d,%d), %08X %d\n", x, y, pres, ax, ay, az, buttons, proxi); + if (axmax > 0) + ax = ax * 255 / axmax; + else + ax = 0; + if (aymax > 0) + ay = ay * 255 / aymax; + else + ay = 0; + if (azmax > 0) + az = az * 255 / azmax; + else + az = 0; + pres = pres * 255 / maxpres; + + tablet_x = x; + tablet_y = ymax - y; + tablet_z = z; + tablet_pressure = pres; + tablet_buttons = buttons; + tablet_ax = abs (ax); + tablet_ay = abs (ay); + tablet_az = abs (az); + tablet_flags = flags; + + tablet_send (); +} + +static int gettabletres (AXIS *a) +{ + FIX32 r = a->axResolution; + switch (a->axUnits) + { + case TU_INCHES: + return r >> 16; + case TU_CENTIMETERS: + return (int)(((r / 65536.0) / 2.54) + 0.5); + default: + return -1; + } +} + +void *open_tablet (HWND hwnd) +{ + LOGCONTEXT lc; + AXIS tx = { 0 }, ty = { 0 }, tz = { 0 }; + AXIS pres = { 0 }; + + if (!tablet) + return 0; + xmax = -1; + ymax = -1; + zmax = -1; + WTInfo (WTI_DEFCONTEXT, 0, &lc); + WTInfo (WTI_DEVICES, DVC_X, &tx); + WTInfo (WTI_DEVICES, DVC_Y, &ty); + WTInfo (WTI_DEVICES, DVC_NPRESSURE, &pres); + xmax = tx.axMax; + ymax = ty.axMax; + if (WTInfo (WTI_DEVICES, DVC_Z, &tz)) + zmax = tz.axMax; + lc.lcOptions |= CXO_MESSAGES; + lc.lcPktData = PACKETDATA; + lc.lcPktMode = PACKETMODE; + lc.lcMoveMask = PACKETDATA; + lc.lcBtnUpMask = lc.lcBtnDnMask; + lc.lcInExtX = tx.axMax; + lc.lcInExtY = ty.axMax; + if (zmax > 0) + lc.lcInExtZ = tz.axMax; + write_log ("Tablet '%s' parameters\n", tabletname); + write_log ("Xmax=%d,Ymax=%d,Zmax=%d\n", xmax, ymax, zmax); + write_log ("Xres=%.1f:%d,Yres=%.1f:%d,Zres=%.1f:%d\n", + tx.axResolution / 65536.0, tx.axUnits, ty.axResolution / 65536.0, ty.axUnits, tz.axResolution / 65536.0, tz.axUnits); + write_log ("Xrotmax=%d,Yrotmax=%d,Zrotmax=%d\n", axmax, aymax, azmax); + write_log ("PressureMin=%d,PressureMax=%d\n", pres.axMin, pres.axMax); + maxpres = pres.axMax; + xres = gettabletres (&tx); + yres = gettabletres (&ty); + tablet_proximity = -1; + tablet_x = -1; + inputdevice_tablet_info (xmax, ymax, zmax, axmax, aymax, azmax, xres, yres); + return WTOpen (hwnd, &lc, TRUE); +} + +int close_tablet (void *ctx) +{ + if (ctx != NULL) + WTClose (ctx); + ctx = NULL; + if (!tablet) + return 0; + return 1; +} + +int is_tablet (void) +{ + return tablet ? 1 : 0; +} + +static int initialize_tablet (void) +{ + HANDLE h; + char name[MAX_DPATH]; + struct tagAXIS ori[3]; + int tilt = 0; + + h = LoadLibrary ("wintab32.dll"); + if (h == NULL) { + write_log ("Tablet: no wintab32.dll\n"); + return 0; + } + FreeLibrary (h); + if (!WTInfo (0, 0, NULL)) { + write_log ("Tablet: WTInfo() returned failure\n"); + return 0; + } + WTInfo (WTI_DEVICES, DVC_NAME, name); + axmax = aymax = azmax = -1; + tilt = WTInfo (WTI_DEVICES, DVC_ORIENTATION, &ori); + if (tilt) { + if (ori[0].axMax > 0) + axmax = ori[0].axMax; + if (ori[1].axMax > 0) + aymax = ori[1].axMax; + if (ori[2].axMax > 0) + azmax = ori[2].axMax; + } + write_log ("Tablet '%s' detected\n", name); + tabletname = my_strdup (name); + tablet = TRUE; + return 1; +} + +static int initialize_catweasel (void) { int j, i; char tmp[MAX_DPATH]; @@ -747,7 +923,7 @@ static void initialize_windowsmouse (void) int i, j; did += num_mouse; - for (i = 0; i < 2; i++) { + for (i = 0; i < 1; i++) { if (num_mouse >= MAX_INPUT_DEVICES) return; num_mouse++; @@ -1287,6 +1463,8 @@ static int di_do_init (void) initialize_windowsmouse (); write_log ("Catweasel joymouse initialization..\n"); initialize_catweasel (); + write_log ("wintab tablet initialization..\n"); + initialize_tablet (); write_log ("end\n"); sortdd (di_joystick, num_joystick, DID_JOYSTICK); diff --git a/od-win32/dxwrap.c b/od-win32/dxwrap.c index 47ab0dd3..8b6efe4e 100755 --- a/od-win32/dxwrap.c +++ b/od-win32/dxwrap.c @@ -121,9 +121,8 @@ static void clearsurf (LPDIRECTDRAWSURFACE7 surf, DWORD color) ddrval = restoresurface (surf); if (FAILED (ddrval)) break; - } else if (ddrval != DDERR_SURFACEBUSY) { - break; } + break; } } diff --git a/od-win32/hardfile_win32.c b/od-win32/hardfile_win32.c index aa518014..bb0ba529 100755 --- a/od-win32/hardfile_win32.c +++ b/od-win32/hardfile_win32.c @@ -5,7 +5,8 @@ #include "sysdeps.h" #include -#include "resource.h" + +#include "resource" #include "threaddep/thread.h" #include "options.h" diff --git a/od-win32/keyboard_win32.c b/od-win32/keyboard_win32.c index 881a0f09..8721649f 100755 --- a/od-win32/keyboard_win32.c +++ b/od-win32/keyboard_win32.c @@ -372,7 +372,6 @@ void my_kbd_handler (int keyboard, int scancode, int newstate) switch (scancode) { - case DIK_F12: case DIK_F11: if (currprefs.win32_ctrl_F11_is_quit) { if (ctrlpressed ()) diff --git a/od-win32/lcd.c b/od-win32/lcd.c index 0514c199..0a445cb7 100755 --- a/od-win32/lcd.c +++ b/od-win32/lcd.c @@ -4,7 +4,7 @@ #if defined(LOGITECHLCD) -#include "resource.h" +#include "resource" #include "gui.h" #include "lcd.h" diff --git a/od-win32/midi.c b/od-win32/midi.c index ce3e2338..7831a429 100755 --- a/od-win32/midi.c +++ b/od-win32/midi.c @@ -28,11 +28,13 @@ #include #include "sysdeps.h" + +#include "resource" + #include "options.h" #include "parser.h" #include "midi.h" #include "registry.h" -#include "resource.h" #include "win32gui.h" //#define TRACING_ENABLED diff --git a/od-win32/parser.c b/od-win32/parser.c index ba405e45..62575af7 100755 --- a/od-win32/parser.c +++ b/od-win32/parser.c @@ -971,7 +971,7 @@ int readser (int *buffer) len = sizeof (inputbuffer); if (!ReadFile (hCom, inputbuffer, len, &actual, &readol)) { if (GetLastError() == ERROR_IO_PENDING) - WaitForSingleObject(&readol, INFINITE); + WaitForSingleObject (&readol, INFINITE); else return 0; } diff --git a/od-win32/picasso96_win.c b/od-win32/picasso96_win.c index afa4b4a8..2e9783bd 100755 --- a/od-win32/picasso96_win.c +++ b/od-win32/picasso96_win.c @@ -85,7 +85,7 @@ int p96hsync_counter, full_refresh; #define P96TRACING_ENABLED 1 #define P96TRACING_LEVEL 1 #endif -static void flushpixels(void); +static void flushpixels (void); #if P96TRACING_ENABLED #define P96TRACE(x) do { write_log x; } while(0) #else @@ -128,6 +128,8 @@ static LPDIRECTDRAWSURFACE7 p96surface; static int cursorwidth, cursorheight, cursorok; static uae_u32 cursorrgb[4], cursorrgbn[4]; static int reloadcursor, cursorvisible, cursordeactivate; +static HCURSOR wincursor; +static int wincursor_shown; static uaecptr boardinfo; static int interrupt_enabled; int p96vblank; @@ -159,7 +161,8 @@ typedef enum { } BLIT_OPCODE; #include "win32gui.h" -#include "resource.h" +#include "resource" + #define UAE_RTG_LIBRARY_VERSION 40 #define UAE_RTG_LIBRARY_REVISION 3994 static void checkrtglibrary(void) @@ -1330,7 +1333,7 @@ void picasso_putcursor (int sx, int sy, int sw, int sh) int xdiff, ydiff, xdiff2, ydiff2; LPDIRECTDRAWSURFACE7 dstsurf = dxdata.secondary; - if (!cursorvisible || !hwsprite || !cursorok) + if (!cursorvisible || !hwsprite || !cursorok || wincursor_shown) return; if (remcursor_x + remcursor_w < sx) @@ -1404,7 +1407,7 @@ void picasso_clearcursor (void) DWORD ddrval; LPDIRECTDRAWSURFACE7 dstsurf = dxdata.secondary; - if (!cursorok) + if (!cursorok || wincursor_shown) return; if (!mouseput) return; @@ -1466,6 +1469,127 @@ static void putmousepixel (uae_u8 *d, int bpp, int idx) } } +static void putwinmousepixel (HDC andDC, HDC xorDC, int x, int y, int c) +{ + if (c == 0) { + SetPixel (andDC, x, y, RGB (255, 255, 255)); + SetPixel (xorDC, x, y, RGB (0, 0, 0)); + } else { + uae_u32 val = cursorrgbn[c]; + SetPixel (andDC, x, y, RGB (0, 0, 0)); + SetPixel (xorDC, x, y, RGB ((val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff)); + } +} + +static int wincursorcnt; +void picasso_setwincursor (void) +{ + if (wincursor) { + SetCursor (wincursor); + } else { + SetCursor (NULL); + } +} + +static int createwindowscursor (uaecptr src, int w, int h, int hiressprite, int doubledsprite) +{ + HBITMAP andBM, xorBM; + HBITMAP andoBM, xoroBM; + HDC andDC, xorDC, DC, mainDC; + ICONINFO ic; + int x, y, yy; + int ret, isdata; + + ret = 0; + if (wincursor) + DestroyIcon (wincursor); + wincursor = NULL; + wincursor_shown = 0; + if (isfullscreen () > 0 || currprefs.input_tablet == 0 || currprefs.input_magic_mouse == 0) + return 0; + + DC = mainDC = andDC = xorDC = NULL; + andBM = xorBM = NULL; + DC = GetDC (NULL); + if (!DC) + goto end; + mainDC = CreateCompatibleDC (DC); + andDC = CreateCompatibleDC (DC); + xorDC = CreateCompatibleDC (DC); + if (!mainDC || !andDC || !xorDC) + goto end; + andBM = CreateCompatibleBitmap (DC, w, h); + xorBM = CreateCompatibleBitmap (DC, w, h); + if (!andBM || !xorBM) + goto end; + andoBM = SelectObject (andDC, andBM); + xoroBM = SelectObject (xorDC, xorBM); + + isdata = 0; + for (y = 0, yy = 0; y < h; yy++) { + int dbl; + uaecptr img = src + yy * 4 * hiressprite; + for (dbl = 0; dbl < (doubledsprite ? 2 : 1); dbl++) { + x = 0; + while (x < w) { + uae_u32 d1 = get_long (img); + uae_u32 d2 = get_long (img + 2 * hiressprite); + int bits; + int maxbits = w - x; + + if (maxbits > 16 * hiressprite) + maxbits = 16 * hiressprite; + for (bits = 0; bits < maxbits && x < w; bits++) { + uae_u8 c = ((d2 & 0x80000000) ? 2 : 0) + ((d1 & 0x80000000) ? 1 : 0); + d1 <<= 1; + d2 <<= 1; + putwinmousepixel (andDC, xorDC, x, y, c); + if (c > 0) + isdata = 1; + x++; + if (doubledsprite && x < w) { + putwinmousepixel (andDC, xorDC, x, y, c); + x++; + } + } + } + if (y <= h) + y++; + } + } + ret = 1; + + SelectObject (andDC, andoBM); + SelectObject (xorDC, xoroBM); + +end: + DeleteDC (xorDC); + DeleteDC (andDC); + DeleteDC (mainDC); + ReleaseDC (NULL, DC); + + if (!isdata) { + wincursor = LoadCursor (NULL, IDC_ARROW); + } else if (ret) { + memset (&ic, 0, sizeof ic); + ic.hbmColor = xorBM; + ic.hbmMask = andBM; + wincursor = CreateIconIndirect (&ic); + } + + DeleteObject (andBM); + DeleteObject (xorBM); + + if (wincursor) { + SetCursor (wincursor); + wincursor_shown = 1; + } + + if (!ret) + write_log ("RTG Windows color cursor creation failed\n"); + return ret; +} + static uae_u32 setspriteimage (uaecptr bi) { DDSURFACEDESC2 desc; @@ -1483,8 +1607,8 @@ static uae_u32 setspriteimage (uaecptr bi) if (!hwsprite || !dxdata.cursorsurface1) return 0; oldcursor_x = -10000; - w = (uae_u32)get_byte (bi + PSSO_BoardInfo_MouseWidth); - h = (uae_u32)get_byte (bi + PSSO_BoardInfo_MouseHeight); + w = get_byte (bi + PSSO_BoardInfo_MouseWidth); + h = get_byte (bi + PSSO_BoardInfo_MouseHeight); tmpbuf = NULL; flags = get_long (bi + PSSO_BoardInfo_Flags); hiressprite = 1; @@ -1511,9 +1635,11 @@ static uae_u32 setspriteimage (uaecptr bi) goto end; } + createwindowscursor (get_long (bi + PSSO_BoardInfo_MouseImage) + 4 * hiressprite, + w, h, hiressprite, doubledsprite); + tmpbuf = xmalloc (w * h * bpp); - yy = 0; - for (y = 0; y < h; y++, yy++) { + for (y = 0, yy = 0; y < h; y++, yy++) { uae_u8 *p = tmpbuf + w * bpp * y; uae_u8 *pprev = p; uaecptr img = get_long (bi + PSSO_BoardInfo_MouseImage) + 4 * hiressprite + yy * 4 * hiressprite; @@ -2927,7 +3053,7 @@ static uae_u32 REGPARAM2 picasso_BlitPattern (TrapContext *ctx) uae_u32 result = 0; if (NOBLITTER) - return 1; + return 0; if(CopyRenderInfoStructureA2U (rinf, &ri) && CopyPatternStructureA2U (pinf, &pattern)) { Bpp = GetBytesPerPixel(ri.RGBFormat); @@ -4119,7 +4245,7 @@ static uaecptr inituaegfxfuncs (uaecptr start, uaecptr ABI) dw (0x6504); // bcs.s .l1 calltrap (deftrap (picasso_CalculateBytesPerRow)); dw (RTS); - dw (0x0c87); dl (0x00000010); // l1: cmp.l #10,d7 + dw (0x0c87); dl (0x00000010); // l1: cmp.l #$10,d7 dw (0x640a); // bcc.s .l2 dw (0x7200); // moveq #0,d1 dl (0x123b7010); // move.b table(pc,d7.w),d1 diff --git a/od-win32/picasso96_win.h b/od-win32/picasso96_win.h index e5db286f..d9957dfd 100755 --- a/od-win32/picasso96_win.h +++ b/od-win32/picasso96_win.h @@ -559,6 +559,7 @@ extern void init_hz_p96 (void); extern void picasso_handle_hsync (void); extern int picasso_palette (void); extern void picasso_reset (void); +extern void picasso_setwincursor (void); /* This structure describes the UAE-side framebuffer for the Picasso * screen. */ diff --git a/od-win32/resources/resource.h b/od-win32/resources/d/resource similarity index 100% rename from od-win32/resources/resource.h rename to od-win32/resources/d/resource diff --git a/od-win32/resources/d/resource.h b/od-win32/resources/d/resource.h new file mode 100755 index 00000000..357c325a --- /dev/null +++ b/od-win32/resources/d/resource.h @@ -0,0 +1,1006 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by winuae.rc +// +#define IDS_KICKSTART 1 +#define IDS_DISK 2 +#define IDS_DISPLAY 3 +#define IDC_HARDDRIVE_IMAGE 3 +#define IDS_HARDDISK 4 +#define IDS_FLOPPY 5 +#define IDS_ABOUT 6 +#define IDS_LOADSAVE 7 +#define IDS_AVIOUTPUT 8 +#define IDS_IOPORTS 9 +#define IDS_MISC1 10 +#define IDS_MEMORY 11 +#define IDS_CPU 12 +#define IDS_CHIPSET 13 +#define IDS_INPUT 14 +#define IDS_OPENGL 15 +#define IDS_FILTER 15 +#define IDS_MISC2 16 +#define IDS_PATHS 17 +#define IDS_QUICKSTART 18 +#define IDS_FRONTEND 19 +#define IDS_CHIPSET2 20 +#define IDS_GAMEPORTS 21 +#define IDS_EXTTEXT 100 +#define IDS_EXTACTUAL 101 +#define IDS_SOUND 102 +#define IDS_CDROM 103 +#define IDS_FRAMERATE 104 +#define IDS_SECOND 105 +#define IDS_THIRD 106 +#define IDD_KICKSTART 107 +#define IDS_FOURTH 107 +#define IDD_DISPLAY 108 +#define IDS_FIFTH 108 +#define IDD_MEMORY 109 +#define IDS_SIXTH 109 +#define IDD_FLOPPY 110 +#define IDS_SEVENTH 110 +#define IDD_CPU 111 +#define IDS_EIGHTH 111 +#define IDD_ABOUT 112 +#define IDS_NINTH 112 +#define IDD_HARDDISK 113 +#define IDS_TENTH 113 +#define IDS_SELECTADF 114 +#define IDS_ADF 115 +#define IDS_CHOOSEBLANK 116 +#define IDS_SELECTHDF 117 +#define IDS_HDF 118 +#define IDS_SELECTUAE 119 +#define IDS_UAE 120 +#define IDS_SELECTROM 121 +#define IDD_SOUND 122 +#define IDS_ROM 122 +#define IDI_APPICON 123 +#define IDS_SELECTKEY 123 +#define IDI_CPU 124 +#define IDS_KEY 124 +#define IDI_ABOUT 125 +#define IDS_SELECTINFO 125 +#define IDS_NONE 126 +#define IDS_VOLUME 127 +#define IDI_HARDDISK 128 +#define IDS_PATH 128 +#define IDS_RW 129 +#define IDI_SOUND 130 +#define IDS_SECTORS 130 +#define IDS_SURFACES 131 +#define IDS_RESERVED 132 +#define IDS_BLOCKSIZE 133 +#define IDI_FLOPPY 134 +#define IDS_NAME 134 +#define IDD_LOADSAVE 135 +#define IDS_DESCRIPTION 135 +#define IDS_ONEINSTANCE 136 +#define IDI_IOPORTS 137 +#define IDS_INSTALLDIRECTX 137 +#define IDD_IOPORTS 138 +#define IDS_REGKEYCREATEFAILED 138 +#define IDS_COULDNOTLOADCONFIG 139 +#define IDD_CONTRIBUTORS 140 +#define IDS_NOHELP 140 +#define IDD_MISC1 141 +#define IDS_MUSTSELECTCONFIG 141 +#define IDD_HARDFILE 142 +#define IDS_NOAGA 142 +#define IDD_FILESYS 143 +#define IDS_INVALIDCOMPORT 143 +#define IDS_WSOCK2NEEDED 144 +#define IDD_MISC2 144 +#define IDS_UNSUPPORTEDPIXELFORMAT 145 +#define IDS_WAVEOUTOPENFAILURE 146 +#define IDS_MUSTENTERNAME 147 +#define IDS_MUSTSELECTCONFIGFORDELETE 148 +#define IDS_DELETECONFIGCONFIRMATION 149 +#define IDI_MISC1 150 +#define IDS_DELETECONFIGTITLE 150 +#define IDC_MYHAND 151 +#define IDS_GFXCARDCHECK 151 +#define IDD_DIALOG1 152 +#define IDS_GFXCARDTITLE 152 +#define IDD_DEBUGGER 152 +#define IDD_SETINFO 153 +#define IDS_MUSTSELECTPATH 153 +#define IDI_ICON1 153 +#define IDS_SETTINGSERROR 154 +#define IDD_CHIPSET 154 +#define IDS_MUSTSELECTNAME 155 +#define IDI_MOVE_UP 155 +#define IDD_CHIPSET2 155 +#define IDS_MUSTSELECTFILE 156 +#define IDI_MOVE_DOWN 156 +#define IDS_FAILEDHARDFILECREATION 157 +#define IDD_AVIOUTPUT 157 +#define IDS_CREATIONERROR 158 +#define IDI_AVIOUTPUT 158 +#define IDS_ERRORTITLE 159 +#define IDS_SELECTFILESYSROOT 160 +#define IDD_OPENGL 160 +#define IDD_FILTER 160 +#define IDS_DEFAULTMIDIOUT 161 +#define IDS_DEFAULTMIDIIN 162 +#define IDS_CONTRIBUTORS1 163 +#define IDD_HARDDRIVE 163 +#define IDS_CONTRIBUTORS2 164 +#define IDS_INVALIDPRTPORT 165 +#define IDS_SELECTUSS 166 +#define IDS_RESTOREUSS 166 +#define IDS_USS 167 +#define IDS_WRONGOSVERSION 168 +#define IDR_DRIVE_STARTUP_A500_1 168 +#define IDS_SELECTFLASH 169 +#define IDR_DRIVE_CLICK_A500_1 169 +#define IDS_FLASH 170 +#define IDR_DRIVE_SPIN_A500_1 170 +#define IDD_INPUT 171 +#define IDS_INPUTHOSTWIDGET 171 +#define IDI_INPUT 172 +#define IDS_INPUTAMIGAEVENT 172 +#define IDD_DISK 172 +#define IDS_INPUTAUTOFIRE 173 +#define IDS_SAVEUSS 174 +#define IDS_MIDIOVERFLOW 175 +#define IDS_HFDSIZE 176 +#define IDS_DEVICE 177 +#define IDS_BOOTPRI 178 +#define IDS_WRONGDXVERSION 179 +#define IDI_MISC2 180 +#define IDS_FLOPPY_COMPATIBLE 180 +#define IDR_DRIVE_SNATCH_A500_1 181 +#define IDS_FLOPPY_TURBO 181 +#define IDI_DISK 182 +#define IDR_DRIVE_SPINND_A500_1 182 +#define IDS_YES 182 +#define IDD_PANEL 183 +#define IDS_NO 183 +#define IDD_PATHS 184 +#define IDS_PRI_ABOVENORMAL 184 +#define IDI_CONFIGFILE 185 +#define IDD_QUICKSTART 185 +#define IDS_PRI_NORMAL 185 +#define IDM_SYSTRAY 186 +#define IDS_PRI_BELOWNORMAL 186 +#define IDS_PRI_LOW 187 +#define IDI_FOLDER 188 +#define IDS_OLDRTGLIBRARY 188 +#define IDS_DEFAULT_AF2005 189 +#define IDI_DISPLAY 190 +#define IDS_DEFAULT_AF 190 +#define IDS_DEFAULT_WINUAE 191 +#define IDI_ROOT 192 +#define IDS_INP 192 +#define IDS_RESTOREINP 193 +#define IDI_ICON2 194 +#define IDI_MEMORY 194 +#define IDS_SAVEINP 194 +#define IDS_SCREEN_WINDOWED 195 +#define IDS_SCREEN_FULLSCREEN 196 +#define IDS_SCREEN_FULLWINDOW 197 +#define IDS_SCREEN_VSYNC 198 +#define IDS_SOUND_MONO 200 +#define IDS_SOUND_MIXED 201 +#define IDI_QUICKSTART 201 +#define IDS_SOUND_STEREO 202 +#define IDS_SOUND_INTERPOL_DISABLED 203 +#define IDS_DISABLED 203 +#define IDS_SOUND_INTERPOL_RH 204 +#define IDI_PATHS 204 +#define IDS_SOUND_INTERPOL_CRUX 205 +#define IDS_SOUND_FILTER_OFF 206 +#define IDS_SOUND_FILTER_EMULATED 207 +#define IDS_SOUND_FILTER_EMULATED_E 208 +#define IDS_INPUT_COMPATIBILITY 209 +#define IDS_INPUT_CUSTOM 210 +#define IDS_INPUT_COPY_DEFAULT 211 +#define IDS_INPUT_COPY_CUSTOM 212 +#define IDS_3D_NO_FILTER 213 +#define IDS_3D_BILINEAR 214 +#define IDS_VSYNC_DEFAULT 215 +#define IDS_DRIVESOUND_NONE 216 +#define IDS_DRIVESOUND_DEFAULT_A500 217 +#define IDS_AVIOUTPUT_NOCODEC 218 +#define IDS_DISK_IMAGENAME 219 +#define IDS_DISK_DRIVENAME 220 +#define IDS_AGA8BIT 221 +#define IDS_UNSUPPORTEDSCREENMODE 222 +#define IDS_UNSUPPORTEDSCREENMODE_1 223 +#define IDS_UNSUPPORTEDSCREENMODE_2 224 +#define IDS_UNSUPPORTEDSCREENMODE_3 225 +#define IDS_UNSUPPORTEDSCREENMODE_4 226 +#define IDS_FLOPPYTYPE35DD 227 +#define IDS_FLOPPYTYPE35HD 228 +#define IDS_FLOPPYTYPE525SD 229 +#define IDS_FLOPPYTYPEDISABLED 230 +#define IDS_STMENUNOFLOPPY 231 +#define IDS_TREEVIEW_HARDWARE 232 +#define IDS_TREEVIEW_HOST 233 +#define IDS_TREEVIEW_MISC 234 +#define IDS_TREEVIEW_SETTINGS 235 +#define IDS_WINUAETITLE_MMB 236 +#define IDS_WINUAETITLE_NORMAL 237 +#define IDS_STARTEMULATION 238 +#define IDS_TREEVIEW_ABOUT 239 +#define IDS_NOHARDDRIVES 240 +#define IDS_DEFAULT_HOST 241 +#define IDS_SOUND_4CHANNEL 242 +#define IDS_HF_FS_CUSTOM 243 +#define IDS_SELECTFS 244 +#define IDS_KEYJOY 245 +#define IDB_XARCADE 246 +#define IDS_STATEFILE_UNCOMPRESSED 246 +#define IDS_STATEFILE_RAMDUMP 247 +#define IDS_STATEFILE_WAVE 248 +#define IDD_FRONTEND 249 +#define IDS_SOUND_SWAP_PAULA 249 +#define IDS_SOUND_SWAP_AHI 250 +#define IDD_PROGRESSBAR 250 +#define IDS_SOUND_SWAP_BOTH 251 +#define IDD_STRINGBOX 251 +#define IDB_BITMAP1 252 +#define IDB_LCD160X43 252 +#define IDS_SOUND_FILTER_ON_AGA 252 +#define IDS_SOUND_FILTER_ON 253 +#define IDS_SOUND_FILTER_ON_A500 253 +#define IDS_DRIVESOUND_PC_FLOPPY 254 +#define IDS_FLOPPYTYPE35DDESCOM 255 +#define IDS_SOUND_STEREO2 256 +#define IDS_INPUT_CUSTOMEVENT 257 +#define IDS_DEFAULT_NEWWINUAE 258 +#define IDS_SOUND_CLONED51 259 +#define IDS_SOUND_51 260 +#define IDS_AUTOMATIC 261 +#define IDI_GAMEPORTS 262 +#define IDD_GAMEPORTS 263 +#define IDS_NUMSG_NEEDEXT2 300 +#define IDS_NUMSG_NOROMKEY 301 +#define IDS_NUMSG_KSROMCRCERROR 302 +#define IDS_NUMSG_KSROMREADERROR 303 +#define IDS_NUMSG_NOEXTROM 304 +#define IDS_NUMSG_MODRIP_NOTFOUND 305 +#define IDS_NUMSG_MODRIP_FINISHED 306 +#define IDS_NUMSG_MODRIP_SAVE 307 +#define IDS_NUMSG_KS68020 308 +#define IDS_NUMSG_ROMNEED 309 +#define IDS_NUMSG_NOZLIB 310 +#define IDS_NUMSG_STATEHD 311 +#define IDS_NUMSG_NOCAPS 312 +#define IDS_NUMSG_OLDCAPS 313 +#define IDS_IMGCHK_BOOTBLOCKCRCERROR 314 +#define IDS_IMGCHK_BOOTBLOCKNO 315 +#define IDS_IMGCHK_DAMAGED 316 +#define IDS_IMGCHK_KS2 317 +#define IDS_IMGCHK_KS3 318 +#define IDS_ROMSCANEND 319 +#define IDS_ROM_AVAILABLE 320 +#define IDS_ROM_UNAVAILABLE 321 +#define IDS_HARDDRIVESAFETYWARNING1 322 +#define IDS_NUMSG_KS68EC020 323 +#define IDS_ROMSCANNOROMS 324 +#define IDS_NUMSG_KICKREP 325 +#define IDS_NUMSG_KICKREPNO 326 +#define IDS_NUMSG_NOROM 327 +#define IDS_HDCLONE_OK 328 +#define IDS_HDCLONE_FAIL 329 +#define IDR_DBGACCEL 330 +#define IDS_NUMSG_KS68030 331 +#define IDS_NUMSG_EXPROMNEED 332 +#define IDS_HARDDRIVESAFETYWARNING2 333 +#define IDM_DBGCONTEXTMENU 334 +#define IDS_SB_FAVORITENAME 334 +#define IDD_DBGMEMINPUT 335 +#define IDS_SB_CUSTOMEVENT 335 +#define IDS_QS_MODELS 1000 +#define IDS_QS_MODEL_A500 1001 +#define IDS_QS_MODEL_A500P 1002 +#define IDS_QS_MODEL_A600 1003 +#define IDS_QS_MODEL_A1000 1004 +#define IDS_QS_MODEL_A1200 1005 +#define IDS_QS_MODEL_CD32 1006 +#define IDS_QS_MODEL_CDTV 1007 +#define IDS_QS_MODEL_UAE 1008 +#define IDS_QS_MODEL_ARCADIA 1009 +#define IDS_QS_MODEL_A3000 1010 +#define IDS_QS_MODEL_A4000 1011 +#define IDS_QS_MODEL_A4000T 1012 +#define IDC_RESOLUTION 1021 +#define IDC_SERIAL 1022 +#define IDC_REFRESHRATE 1022 +#define IDC_ILLEGAL 1023 +#define IDC_MIDILIST 1023 +#define IDC_MIDIOUTLIST 1023 +#define IDC_DA_MODE 1023 +#define IDC_SHOWGUI 1024 +#define IDC_MIDIINLIST 1024 +#define IDC_RESOLUTION2 1024 +#define IDC_DISPLAYSELECT 1024 +#define IDC_AUTOCONFIG 1025 +#define IDC_PRINTERLIST 1025 +#define IDC_RESOLUTION3 1025 +#define IDC_RESOLUTIONDEPTH 1025 +#define IDC_CHIPMEM 1026 +#define IDC_CREATELOGFILE 1026 +#define IDC_PORT0_JOYS 1026 +#define IDC_SCREENMODE_NATIVE 1026 +#define IDC_FASTMEM 1027 +#define IDC_SHOWLEDS 1027 +#define IDC_PORT1_JOYS 1027 +#define IDC_SCREENMODE_RTG 1027 +#define IDC_MBMEM1 1028 +#define IDC_SLOWMEM 1030 +#define IDC_MBMEM2 1031 +#define IDC_PARALLEL 1033 +#define IDC_JULIAN 1040 +#define IDC_FASTTEXT 1043 +#define IDC_FASTRAM 1044 +#define IDC_CHIPRAM 1045 +#define IDC_SLOWRAM 1046 +#define IDC_Z3TEXT 1047 +#define IDC_Z3FASTRAM 1048 +#define IDC_Z3FASTMEM 1049 +#define IDC_MBRAM1 1050 +#define IDC_MBRAM2 1051 +#define IDC_UAEHOME 1070 +#define IDC_PICASSOHOME 1071 +#define IDC_AMIGAHOME 1072 +#define IDC_WINUAEHOME 1073 +#define IDC_AIABHOME 1074 +#define IDC_CLOANTOHOME 1075 +#define IDC_THEROOTS 1076 +#define IDC_CAPS 1077 +#define IDC_ABIME 1078 +#define IDC_AMIGASYS 1079 +#define IDC_AMIKIT 1080 +#define IDC_RICHEDIT1 1091 +#define IDC_RICHEDIT2 1092 +#define IDC_CONTRIBUTORS 1124 +#define IDC_ASPECT 1170 +#define IDC_BLIT32 1173 +#define IDC_BLITIMM 1174 +#define IDC_LORES 1176 +#define IDC_LORES_SMOOTHED 1179 +#define IDC_FRAMERATE 1185 +#define IDC_RATETEXT 1186 +#define IDC_XSIZE 1187 +#define IDC_YSIZE 1188 +#define IDC_INPUTAUTOFIRERATE 1188 +#define IDC_LM_NORMAL 1189 +#define IDC_INPUTSPEEDD 1189 +#define IDC_LM_DOUBLED 1190 +#define IDC_INPUTSPEEDA 1190 +#define IDC_GFXCARDTEXT 1191 +#define IDC_LM_SCANLINES 1191 +#define IDC_INPUTSPEEDM 1191 +#define IDC_P96RAM 1192 +#define IDC_P96MEM 1193 +#define IDC_DA_SLIDER 1193 +#define IDC_FRAMERATE2 1194 +#define IDC_RATE2TEXT 1195 +#define IDC_CPU0 1200 +#define IDC_CPU1 1201 +#define IDC_CPU2 1202 +#define IDC_CPU3 1203 +#define IDC_CPU4 1204 +#define IDC_CPU5 1205 +#define IDC_CS_HOST 1209 +#define IDC_CS_68000 1210 +#define IDC_CS_ADJUSTABLE 1211 +#define IDC_CS_CPU_TEXT 1212 +#define IDC_CS_CHIPSET_TEXT 1213 +#define IDC_COMPATIBLE 1214 +#define IDC_TRUST0 1215 +#define IDC_TRUST1 1216 +#define IDC_CACHE 1218 +#define IDC_CYCLEEXACT 1219 +#define IDC_CS_CPU_TEXT2 1219 +#define IDC_CPUIDLE 1220 +#define IDC_GENLOCK 1220 +#define IDC_COMPATIBLE_FPU 1221 +#define IDC_FASTERRTG 1221 +#define IDC_COMPATIBLE24 1222 +#define IDC_SPEED 1223 +#define IDC_FPU0 1224 +#define IDC_FPU1 1225 +#define IDC_FPU2 1226 +#define IDC_FPU3 1227 +#define IDC_SOUNDSETTINGS 1229 +#define IDC_8BIT 1230 +#define IDC_16BIT 1231 +#define IDC_11KHZ 1232 +#define IDC_22KHZ 1233 +#define IDC_44KHZ 1234 +#define IDC_48KHZ 1235 +#define IDC_SOUNDSIZE 1236 +#define IDC_FREQUENCY 1237 +#define IDC_SOUND0 1238 +#define IDC_SOUND1 1239 +#define IDC_SOUND2 1240 +#define IDC_SOUND3 1241 +#define IDC_SOUNDSTYLE 1242 +#define IDC_SOUNDSTYLE0 1243 +#define IDC_STEREO 1244 +#define IDC_SOUNDSTYLE1 1245 +#define IDC_SOUNDINTERPOLATION 1248 +#define IDC_INTERPOLATION0 1249 +#define IDC_INTERPOLATION1 1250 +#define IDC_INTERPOLATION2 1251 +#define IDC_STEREOMODE 1252 +#define IDC_SOUNDINTERPOLATION2 1252 +#define IDC_STEREOMODE0 1253 +#define IDC_STEREOMODE1 1254 +#define IDC_STEREOMODE2 1255 +#define IDC_SOUNDINTERPOLATION3 1256 +#define IDC_DF0TEXT 1270 +#define IDC_DF1TEXT 1271 +#define IDC_DF2TEXT 1272 +#define IDC_DF3TEXT 1273 +#define IDC_EJECT0 1274 +#define IDC_EJECT1 1275 +#define IDC_EJECT2 1276 +#define IDC_EJECT3 1277 +#define IDC_DF0 1278 +#define IDC_DF1 1279 +#define IDC_DF2 1280 +#define IDC_DF3 1281 +#define IDC_CREATE 1282 +#define IDC_CREATE_RAW 1283 +#define IDC_SNAPSHOTNAME 1284 +#define IDC_SNAPSHOT 1285 +#define IDC_SAVEIMAGE0 1285 +#define IDC_DOSAVESTATE 1286 +#define IDC_SAVEIMAGE1 1286 +#define IDC_DOLOADSTATE 1287 +#define IDC_SAVEIMAGE2 1287 +#define IDC_PROWIZARD 1288 +#define IDC_SAVEIMAGE3 1288 +#define IDC_PORT0_JOYSC 1302 +#define IDC_PORT0_KBDA 1303 +#define IDC_PORT0_KBDB 1304 +#define IDC_PORT0_KBDC 1305 +#define IDC_PORT0_KBDD 1306 +#define IDC_PORT0_KBDE 1307 +#define IDC_PORT1_JOYSC 1308 +#define IDC_PORT1_KBDA 1309 +#define IDC_PORT1_KBDB 1310 +#define IDC_PORT1_KBDC 1311 +#define IDC_PORT1_KBDD 1312 +#define IDC_PORT1_KBDE 1313 +#define IDC_MIDIFRAME 1314 +#define IDC_SERPARFRAME 1315 +#define IDC_SERIALFRAME 1316 +#define IDC_EDIT 1334 +#define IDC_REMOVE 1335 +#define IDC_VOLUMELIST 1336 +#define IDC_UP 1337 +#define IDC_DOWN 1338 +#define IDC_NEW_FS 1339 +#define IDC_NEW_HF 1340 +#define IDC_NEW_HD 1341 +#define IDC_PORT0 1342 +#define IDC_NEW_FSARCH 1342 +#define IDC_PORT1 1343 +#define IDC_PATH_NAME 1362 +#define IDC_SELECTOR 1363 +#define IDC_VOLUME_NAME 1364 +#define IDC_HARDFILE_DEVICE 1364 +#define IDC_SECTORS 1365 +#define IDC_VOLUME_DEVICE 1365 +#define IDC_HEADS 1366 +#define IDC_RESERVED 1367 +#define IDC_BLOCKSIZE 1368 +#define IDC_HARDFILE_BOOTPRI 1369 +#define IDC_SECTORS_TEXT 1370 +#define IDC_SURFACES_TEXT 1371 +#define IDC_RESERVED_TEXT 1372 +#define IDC_RESERVED_TEXT2 1373 +#define IDC_BLOCKSIZE_TEXT 1374 +#define ID_OK 1375 +#define IDC_HARDFILE_BOOTPRI_TEXT 1375 +#define IDC_PATH_FILESYS 1376 +#define IDC_HARDFILE_DIR_TEXT 1377 +#define IDC_HARDFILE_DEVICE_TEXT 1378 +#define IDC_HFRDB 1380 +#define IDC_RDB 1380 +#define IDC_HARDFILE_FILESYS_TEXT 1380 +#define IDC_FS_AUTOBOOT 1380 +#define IDC_FILESYS_SELECTOR 1381 +#define IDC_HDF_AUTOBOOT 1382 +#define IDC_HDF_DONOTMOUNT 1383 +#define IDC_ROMFILE 1390 +#define IDC_KEYFILE 1391 +#define IDC_KICKCHOOSER 1392 +#define IDC_KEYCHOOSER 1393 +#define IDC_ROMFILE2 1394 +#define IDC_ROMCHOOSER2 1395 +#define IDC_FLASHCHOOSER 1396 +#define IDC_FLASHFILE 1397 +#define IDC_CARTFILE 1398 +#define IDC_CARTCHOOSER 1399 +#define IDC_SAVE 1400 +#define IDC_LOAD 1401 +#define IDC_DELETE 1403 +#define IDC_CONFIGLIST 1404 +#define IDC_EDITNAME 1405 +#define IDC_EDITDESCRIPTION 1406 +#define IDC_QUICKSAVE 1408 +#define IDC_QUICKLOAD 1409 +#define IDC_EXIT 1410 +#define IDC_EDITPATH 1410 +#define IDC_HDF_RDB 1500 +#define IDC_HFSIZE 1501 +#define IDC_HF_SIZE 1501 +#define IDC_LINEMODE 1502 +#define IDC_CREATEHF 1502 +#define IDC_HF_CREATE 1502 +#define IDC_SOCKETS 1503 +#define IDC_HF_DOSTYPE 1503 +#define IDC_HDF_CONTROLLER 1504 +#define IDC_RESETAMIGA 1504 +#define IDC_QUITEMU 1505 +#define IDC_MAPDRIVES 1507 +#define IDC_CPUTEXT 1508 +#define IDC_MAPDRIVES_NET 1508 +#define IDC_RESTARTEMU 1508 +#define IDC_SWAP 1509 +#define IDC_CACHETEXT 1509 +#define IDC_MAPDRIVES_CD 1509 +#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 +#define IDC_SETTINGSTEXT 1514 +#define IDC_REFRESHTEXT 1515 +#define IDC_SETTINGSTEXT2 1515 +#define IDC_DISABLE1 1516 +#define IDC_DF1WP 1516 +#define IDC_QUICKSTART_COMPA 1516 +#define IDC_REFRESH2TEXT 1516 +#define IDC_DISABLE2 1517 +#define IDC_DF2WP 1517 +#define IDC_QUICKSTART_DF 1517 +#define IDC_DISABLE3 1518 +#define IDC_XCENTER 1518 +#define IDC_DF3WP 1518 +#define IDC_DF1WP2 1518 +#define IDC_QUICKSTART_HOST 1518 +#define IDC_YCENTER 1519 +#define IDC_DISABLE0 1519 +#define IDC_DF0WP 1519 +#define IDC_OCS 1520 +#define IDC_HDFLOPPY 1520 +#define IDC_ECS_AGNUS 1521 +#define IDC_ECS_DENISE 1522 +#define IDC_ECS 1523 +#define IDC_AGA 1524 +#define IDC_NTSC 1525 +#define IDC_NOSPEED 1527 +#define IDC_NOSOUND 1528 +#define IDC_INACTIVE_NOSOUND 1528 +#define IDC_MIDI 1529 +#define IDC_NOSPEEDPAUSE 1529 +#define IDC_INACTIVE_PAUSE 1529 +#define IDC_KICKSHIFTER 1530 +#define IDC_MIDI2 1530 +#define IDC_HIGHPRIORITY 1530 +#define IDC_MINIMIZED_NOSOUND 1530 +#define IDC_MINIMIZED_PAUSE 1531 +#define IDC_STATE_CAPTURE 1532 +#define IDC_KBLED_USB 1533 +#define IDC_SER_SHARED 1553 +#define IDC_SER_CTSRTS 1554 +#define IDC_SER_DIRECT 1555 +#define IDC_PSPRINTER 1556 +#define IDC_PSPRINTERDETECT 1557 +#define IDC_UAESERIAL 1558 +#define IDC_VIEWINFO 1568 +#define IDC_SETINFO 1569 +#define IDC_FLOPPYSLIDER 1570 +#define IDC_FLOPPYSLIDERTEXT 1571 +#define IDC_FLOPPYSPEED 1572 +#define IDC_FLOPPYSPD 1572 +#define IDC_GUILANGUAGE_LIST 1573 +#define IDC_SOUNDBUFFERRAM 1574 +#define IDC_SOUNDADJUST 1575 +#define IDC_SOUNDBUFFERTEXT 1576 +#define IDC_SOUNDVOLUME 1576 +#define IDC_SOUNDBUFFERMEM 1577 +#define IDC_HARDFLUSH 1578 +#define IDC_SOUNDADJUSTNUM 1578 +#define IDC_CONSTJUMP 1579 +#define IDC_SOUNDDRIVEVOLUME 1579 +#define IDC_JITFPU 1580 +#define IDC_SOUNDVOLUME2 1580 +#define IDC_NOFLAGS 1581 +#define IDC_SOUNDDRIVEVOLUME2 1581 +#define IDC_CS_CACHE_TEXT 1582 +#define IDC_COLLISIONS 1584 +#define IDC_JITENABLE 1584 +#define IDC_DISASSEMBLY 1585 +#define IDC_CTRLF11 1586 +#define IDC_FASTCOPPER 1588 +#define IDC_COLLISION0 1589 +#define IDC_COLLISION1 1590 +#define IDC_AUDIOSYNC 1590 +#define IDC_COLLISION2 1591 +#define IDC_COLLISION3 1592 +#define IDC_SOUNDLAGSLIDER 1592 +#define IDC_SOUNDLAGCAPTION 1594 +#define IDC_FLOPPYTYPE 1594 +#define IDC_SYNCPARAMS 1595 +#define IDC_DF0TYPE 1595 +#define IDC_SOUNDLAGTEXT 1596 +#define IDC_DF1TYPE 1596 +#define IDC_DF2TYPE 1597 +#define IDC_SOUNDSPEEDSLIDER 1598 +#define IDC_DF0TYPE4 1598 +#define IDC_DF3TYPE 1598 +#define IDC_SOUNDSPEEDTEXT 1599 +#define IDC_SOUNDSPEEDCAPTION 1600 +#define IDC_RTGMATCHDEPTH 1601 +#define IDC_ROMFILE2TEXT 1602 +#define IDC_ROMTEXT 1603 +#define IDC_KEYTEXT 1604 +#define IDC_CD32 1605 +#define IDC_AKIKOC2P 1605 +#define IDC_FLASHTEXT 1605 +#define IDC_SCSIDEVICE 1606 +#define IDC_FLASHTEXT2 1606 +#define IDC_AVIOUTPUT_PAL 1607 +#define IDC_INPUTTYPE 1607 +#define IDC_AVIOUTPUT_NTSC 1608 +#define IDC_INPUTSELECTTEXT 1608 +#define IDC_NOUAEFSDB 1608 +#define IDC_NOTASKBARBUTTON 1608 +#define IDC_CLOCKSYNC 1609 +#define IDC_AVIOUTPUT_FPS 1609 +#define IDC_INPUTDEVICE 1609 +#define IDC_MAPROM 1609 +#define IDC_NORECYCLEBIN 1609 +#define IDC_AVIOUTPUT_FILETEXT 1610 +#define IDC_INPUTDEVICETEXT 1610 +#define IDC_ALWAYSONTOP 1610 +#define IDC_AVIOUTPUT_FILE 1611 +#define IDC_INPUTLIST 1611 +#define IDC_CATWEASEL 1611 +#define IDC_AVIOUTPUT_FPS_STATIC 1612 +#define IDC_INPUTAMIGA 1612 +#define IDC_ALWAYSONTOP2 1612 +#define IDC_BORDERLESS 1612 +#define IDC_POWERSAVE 1612 +#define IDC_AVIOUTPUT_VIDEO 1613 +#define IDC_INPUTAUTOFIRE 1613 +#define IDC_MOUSETRICK 1613 +#define IDC_AVIOUTPUT_AUDIO 1614 +#define IDC_INPUTCOPYFROM 1614 +#define IDC_SANA2 1614 +#define IDC_AVIOUTPUT_VIDEO_CODEC 1615 +#define IDC_INPUTDEVICEDISABLE 1615 +#define IDC_AVIOUTPUT_ACTIVATED 1615 +#define IDC_FILTERENABLE 1615 +#define IDC_AVIOUTPUT_AUDIO_CODEC 1616 +#define IDC_INPUTAMIGACNT 1616 +#define IDC_FILTERHZ 1616 +#define IDC_SAMPLERIPPER_ACTIVATED 1616 +#define IDC_AVIOUTPUT_BORDER_TRIM 1617 +#define IDC_FILTERVZ 1617 +#define IDC_INPREC_RECORD 1617 +#define IDC_AVIOUTPUT_AUDIO_STATIC 1618 +#define IDC_FILTERHO 1618 +#define IDC_AVIOUTPUT_VIDEO_STATIC 1619 +#define IDC_FILTERVO 1619 +#define IDC_AVIOUTPUT_8BIT 1620 +#define IDC_INPREC_PLAY 1620 +#define IDC_FILTERASPECT 1620 +#define IDC_AVIOUTPUT_24BIT 1621 +#define IDC_AVIOUTPUT_WIDTH 1622 +#define IDC_AVIOUTPUT_HEIGHT 1623 +#define IDC_AVIOUTPUT_FRAME 1624 +#define IDC_FILTERXL 1624 +#define IDC_FILTERSLR 1625 +#define IDC_FILTERHZMULT 1626 +#define IDC_FILTERMODE 1627 +#define IDC_FILTERFILTER 1628 +#define IDC_FILTERDEFAULT 1629 +#define IDC_FILTERXTRA 1630 +#define IDC_INPUTDEADZONE 1630 +#define IDC_INPUTCOPY 1631 +#define IDC_FILTERPRESETS 1631 +#define IDC_SCREENSHOT 1632 +#define IDC_INPUTSWAP 1632 +#define IDC_FILTERPRESETLOAD 1632 +#define IDC_FLOPPYSPDTEXT 1633 +#define IDC_FILTERPRESETSAVE 1633 +#define IDC_FLOPPYSPD_TEXT 1634 +#define IDC_FILTERPRESETDELETE 1634 +#define IDC_HARDDRIVE 1635 +#define IDC_INACTIVE_PRI 1635 +#define IDC_FILTERVZMULT 1635 +#define IDC_SOUNDPRIMARY 1636 +#define IDC_MINIMIZED_PRI 1636 +#define IDC_VOLUME_BOOTPRI_TEXT 1637 +#define IDC_VOLUME_BOOTPRI 1638 +#define IDC_KBLED1 1639 +#define IDC_KBLED2 1640 +#define IDC_SOUNDFILTER 1640 +#define IDC_KBLED3 1641 +#define IDC_SOUNDCALIBRATE 1641 +#define IDC_ACTIVE_PRIORITY 1642 +#define IDC_SOUNDDRIVE 1642 +#define IDC_INACTIVE_PRIORITY 1643 +#define IDC_ACTIVE_PRI 1644 +#define IDC_MINIMIZED_PRIORITY 1645 +#define IDC_AVIOUTPUT_FRAMELIMITER 1645 +#define IDC_STATE_RATE 1646 +#define IDC_INPREC_PLAYMODE 1646 +#define IDC_STATE_BUFFERSIZE 1647 +#define IDC_SOUNDDRIVESELECT 1647 +#define IDC_PANELTREE 1647 +#define IDC_AVIOUTPUT_FRAMELIMITER2 1647 +#define IDC_AVIOUTPUT_NOSOUNDOUTPUT 1647 +#define IDC_AVIOUTPUT_DIMENSIONS_STATIC 1648 +#define IDC_STATE_BUFFERSIZE_TEXT 1648 +#define IDC_CONFIGTREE 1648 +#define IDC_AVIOUTPUT_OPTIONS 1649 +#define IDC_STATE_RATE_TEXT 1649 +#define IDC_DISKLISTREMOVE 1649 +#define IDC_DF0QENABLE 1649 +#define IDC_SOUNDCARD 1650 +#define IDC_CS_SOUND0 1650 +#define IDC_UPBM 1650 +#define IDC_DISKLISTREMOVE2 1650 +#define IDC_DISKLISTINSERT 1650 +#define IDC_DF1QENABLE 1650 +#define IDC_SOUNDCARDLIST 1651 +#define IDC_CS_SOUND1 1651 +#define IDC_SOUNDFREQ 1652 +#define IDC_CS_SOUND2 1652 +#define IDC_SOUNDCARD2 1653 +#define IDC_SOUNDFREQTXT 1653 +#define IDC_PANEL_FRAME 1653 +#define IDC_SOUNDFILTERTXT 1654 +#define IDC_PANEL_FRAME_OUTER 1654 +#define IDC_SOUNDSTEREO 1655 +#define IDC_CONFIGTYPE 1655 +#define IDC_SOUNDDRIVETXT 1656 +#define IDC_PATHS_ROM 1656 +#define IDC_SOUNDSTEREOSEP 1656 +#define IDC_SOUNDSTEREOTXT 1657 +#define IDC_PATHS_CONFIG 1657 +#define IDC_SOUNDINTERPOLATIONTXT 1658 +#define IDC_PATHS_SCREENSHOT 1658 +#define IDC_DISK 1659 +#define IDC_DISKLIST 1659 +#define IDC_PATHS_SAVEIMAGE 1659 +#define IDC_SOUNDSTEREOSEPTXT 1659 +#define IDC_PATHS_SAVESTATE 1660 +#define IDC_SOUNDSTEREOMIXTXT 1660 +#define IDC_PATHS_ROMS 1661 +#define IDC_SOUNDSTEREOMIX 1661 +#define IDC_PATHS_CONFIGS 1662 +#define IDC_SOUNDSWAP 1662 +#define IDC_PATHS_SCREENSHOTS 1663 +#define IDC_PATHS_SAVESTATES 1664 +#define IDC_SOUNDSTEREOSWAPTXT 1664 +#define IDC_SOUNDSWAPTXT 1664 +#define IDC_PATHS_SAVEIMAGES 1665 +#define IDC_PATHS_ROML 1666 +#define IDC_PATHS_CONFIGL 1667 +#define IDC_PATHS_SCREENSHOTL 1668 +#define IDC_PATHS_STATEFILEL 1669 +#define IDC_PATHS_SAVEIMAGEL 1670 +#define IDC_PATHS_DEFAULT 1671 +#define IDC_ROM_RESCAN 1672 +#define IDC_QUICKSTARTMODE 1673 +#define IDC_RESETREGISTRY 1673 +#define IDC_QUICKSTART_MODEL 1674 +#define IDC_PATHS_AVIOUTPUTL 1674 +#define IDC_QUICKSTART_CONFIGURATION 1675 +#define IDC_PATHS_AVIOUTPUT 1675 +#define IDC_QUICKSTART_COMPATIBILITY 1676 +#define IDC_PATHS_AVIOUTPUTS 1676 +#define IDC_QUICKSTART_CONFIG 1677 +#define IDC_RESETDISKHISTORY 1677 +#define IDC_DF0Q 1678 +#define IDC_DF0QQ 1678 +#define IDC_DF1Q 1679 +#define IDC_QUICKSTART_HOSTCONFIG 1679 +#define IDC_DF1QQ 1680 +#define IDC_QUICKSTART_SETCONFIG 1681 +#define IDC_CONFIGAUTO 1682 +#define IDC_DF0TEXTQ 1683 +#define IDC_CONFIGNOLINK 1683 +#define IDC_DF0WPQ 1684 +#define IDC_EJECT0Q 1685 +#define IDC_DF1WPQ 1686 +#define IDC_EJECT1Q 1687 +#define IDC_DF1TEXTQ 1688 +#define IDC_FILTERXLV 1692 +#define IDC_FILTERVOV 1693 +#define IDC_FILTERHOV 1694 +#define IDC_CONFIGLINK 1694 +#define IDC_FILTERVZV 1695 +#define IDC_PS_PARAMS 1695 +#define IDC_FILTERHZV 1696 +#define IDC_HF_TYPE 1696 +#define IDC_PRINTERAUTOFLUSH 1697 +#define IDC_PRINTERAUTOFLUSHTXT 1698 +#define IDC_DISKTEXT 1699 +#define IDC_FE_LIST 1700 +#define IDC_FE_INFO 1701 +#define IDC_FE_INFO2 1702 +#define IDC_FE_SCREENSHOT 1702 +#define IDC_PATHS_DEFAULTTYPE 1704 +#define IDC_SCSIMODE 1705 +#define IDC_PROGRESS1 1705 +#define IDC_PROGRESSBAR 1705 +#define IDC_PROGRESSBAR_TEXT 1706 +#define IDC_SCSIMODE2 1706 +#define IDC_LANGUAGE 1706 +#define IDC_CREATE_NAME 1707 +#define IDC_FILTERAUTORES 1708 +#define IDC_SOUND_AUTO 1709 +#define IDC_FILTERKEEPASPECT 1709 +#define IDC_CS_RTC 1710 +#define IDC_CS_CIAA_TOD1 1711 +#define IDC_CS_CIAA_TOD2 1712 +#define IDC_CS_EXT 1712 +#define IDC_CS_CIAA_TOD3 1713 +#define IDC_CS_COMPATIBLE 1714 +#define IDC_CS_RAMSEYREV 1715 +#define IDC_CS_KSMIRROR_E0 1716 +#define IDC_STRINGBOXEDIT 1716 +#define IDC_CS_CD32CD 1717 +#define IDC_CS_CD32C2P 1718 +#define IDC_CS_CD32NVRAM 1719 +#define IDC_CS_CDTVCD 1720 +#define IDC_CS_CDTVRAM 1721 +#define IDC_CS_IDE1 1722 +#define IDC_CS_IDE2 1723 +#define IDC_CS_IDE3 1724 +#define IDC_CS_A1000RAM 1724 +#define IDC_CS_RAMSEY 1725 +#define IDC_CS_GARY 1726 +#define IDC_CS_FATGARY 1726 +#define IDC_CS_DMAC 1727 +#define IDC_CS_RTCADJUST 1728 +#define IDC_CS_RAMSEYREV3 1729 +#define IDC_CS_FATGARYREV 1729 +#define IDC_CS_CDTVRAMEXP 1730 +#define IDC_CS_RTC1 1731 +#define IDC_CS_RTC2 1732 +#define IDC_CS_RTC3 1733 +#define IDC_CS_IDE4 1734 +#define IDC_CS_DF0IDHW 1734 +#define IDC_CS_AGNUS 1735 +#define IDC_CS_AGNUSREV 1736 +#define IDC_CS_DENISE 1737 +#define IDC_CS_AGNUSREV2 1738 +#define IDC_CS_DENISEREV 1738 +#define IDC_DBG_OUTPUT1 1739 +#define IDC_CS_PCMCIA 1739 +#define IDC_CS_SLOWISFAST 1740 +#define IDC_DBG_HELP 1740 +#define IDC_DBG_INPUT 1741 +#define IDC_CS_KSMIRROR_A8 1741 +#define IDC_DBG_DREG 1742 +#define IDC_CS_CIAOVERLAY 1742 +#define IDC_DBG_AREG 1743 +#define IDC_CS_RESETWARNING 1743 +#define IDC_DBG_CCR 1744 +#define IDC_CS_NOEHB 1744 +#define IDC_DBG_AMEM 1745 +#define IDC_CS_BLITTERBUG 1745 +#define IDC_DBG_SP_VBR 1746 +#define IDC_DBG_MMISC 1747 +#define IDC_DBG_PC 1748 +#define IDC_DBG_PREFETCH 1749 +#define IDC_DBG_FPREG 1750 +#define IDC_DBG_FPSR 1751 +#define IDC_DBG_OUTPUT2 1752 +#define IDC_DBG_MEMINPUT 1753 +#define IDC_DBG_MEMDOWN 1754 +#define IDC_DBG_MEMUP 1755 +#define IDC_DBG_MEM 1756 +#define IDC_DBG_DASM 1757 +#define IDC_DBG_MEMDOWNFAST 1758 +#define IDC_DBG_MEMTOPC 1759 +#define IDC_DBG_MEMUPFAST 1760 +#define IDC_DA_RESET 1761 +#define IDC_DBG_STATUS 1762 +#define IDC_DBG_BRKPTS 1763 +#define IDC_DBG_MCUSTOM 1764 +#define IDC_DBG_MISC 1765 +#define IDC_DBG_CUSTOM 1766 +#define IDC_DBG_MISCCPU 1767 +#define IDC_CS_A2091 1768 +#define IDC_CS_DMAC2 1769 +#define IDC_CS_A4091 1770 +#define IDC_CS_CDTVSCSI 1771 +#define IDC_CS_SCSIMODE 1772 +#define IDC_DF0ENABLE 1773 +#define IDC_DF1ENABLE 1774 +#define IDC_FS_SELECT_DIR 1774 +#define IDC_FS_SELECT_FILE 1775 +#define IDC_DF2ENABLE 1776 +#define IDC_FS_SELECT_EJECT 1776 +#define IDC_FS_RW 1777 +#define IDC_DF3ENABLE 1778 +#define IDC_HDF_RW 1778 +#define IDC_HDFINFO 1779 +#define IDC_DBG_AUTOSET 1780 +#define IDC_HF_SPARSE 1780 +#define IDC_DBG_DASM2 1781 +#define IDC_HF_DYNAMIC 1781 +#define IDC_DBG_MEM2 1782 +#define IDC_DBG_MEMINPUT2 1783 +#define IDC_DBG_ADDRINPUTTXT 1784 +#define IDC_RTG_SCALE 1785 +#define IDC_RTG_MATCH_DEPTH 1786 +#define IDC_RTG_8BIT 1787 +#define IDC_RTG_16BIT 1788 +#define IDC_PATHS_CONFIGCACHE 1788 +#define IDC_RTG_24BIT 1789 +#define IDC_ASSOCIATELIST 1789 +#define IDC_RTG_32BIT 1790 +#define IDC_ASSOCIATE_OFF 1790 +#define IDC_DD_SURFACETYPE 1791 +#define IDC_RTG_SCALE_ALLOW 1791 +#define IDC_RTG_SCALE_ASPECTRATIO 1792 +#define IDC_ASSOCIATE_ON 1792 +#define IDC_RTG_VBLANKRATE 1793 +#define ID__FLOPPYDRIVES 40004 +#define ID_FLOPPYDRIVES_DF0 40005 +#define ID_ST_CONFIGURATION 40010 +#define ID_ST_HELP 40011 +#define ID_ST_QUIT 40012 +#define ID_ST_EJECTALL 40013 +#define ID_ST_DF0 40014 +#define ID_ST_DF1 40015 +#define ID_ST_DF2 40016 +#define ID_ST_DF3 40017 +#define ID_ST_RESET 40019 +#define ID_DBG_PAGE1 40020 +#define ID_DBG_PAGE2 40021 +#define ID_DBG_PAGE3 40022 +#define ID_DBG_PAGE4 40023 +#define ID_DBG_PAGE5 40024 +#define ID_DBG_PAGE6 40025 +#define ID_DBG_PAGE7 40026 +#define ID_DBG_PAGE8 40027 +#define ID_DBG_PAGE9 40028 +#define ID_DBG_STEP_OVER 40029 +#define ID_DBG_STEP_INTO 40030 +#define ID_DBG_SETTOA0 40031 +#define ID_DBG_SETTOA1 40032 +#define ID_DBG_SETTOA2 40033 +#define ID_DBG_SETTOA3 40034 +#define ID_DBG_SETTOA4 40035 +#define ID_DBG_SETTOA5 40036 +#define ID_DBG_SETTOA6 40037 +#define ID_DBG_SETTOA7 40038 +#define ID_DBG_ENTERADDR 40039 +#define ID_DBG_COPYLBLINE 40040 +#define ID_DBG_COPYLB 40041 +#define ID_DBG_TOGGLEBP 40042 +#define ID_DBG_DELETEBPS 40043 +#define ID_DBG_SETTOPC 40044 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NO_MFC 1 +#define _APS_3D_CONTROLS 1 +#define _APS_NEXT_RESOURCE_VALUE 335 +#define _APS_NEXT_COMMAND_VALUE 40045 +#define _APS_NEXT_CONTROL_VALUE 1789 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/od-win32/resources/resource b/od-win32/resources/resource index 2c834556..8435e167 100755 --- a/od-win32/resources/resource +++ b/od-win32/resources/resource @@ -11,7 +11,7 @@ #define IDS_ABOUT 6 #define IDS_LOADSAVE 7 #define IDS_AVIOUTPUT 8 -#define IDS_PORTS 9 +#define IDS_IOPORTS 9 #define IDS_MISC1 10 #define IDS_MEMORY 11 #define IDS_CPU 12 @@ -24,6 +24,7 @@ #define IDS_QUICKSTART 18 #define IDS_FRONTEND 19 #define IDS_CHIPSET2 20 +#define IDS_GAMEPORTS 21 #define IDS_EXTTEXT 100 #define IDS_EXTACTUAL 101 #define IDS_SOUND 102 @@ -76,9 +77,9 @@ #define IDD_LOADSAVE 135 #define IDS_DESCRIPTION 135 #define IDS_ONEINSTANCE 136 -#define IDI_PORTS 137 +#define IDI_IOPORTS 137 #define IDS_INSTALLDIRECTX 137 -#define IDD_PORTS 138 +#define IDD_IOPORTS 138 #define IDS_REGKEYCREATEFAILED 138 #define IDS_COULDNOTLOADCONFIG 139 #define IDD_CONTRIBUTORS 140 @@ -253,6 +254,8 @@ #define IDS_SOUND_CLONED51 259 #define IDS_SOUND_51 260 #define IDS_AUTOMATIC 261 +#define IDI_GAMEPORTS 262 +#define IDD_GAMEPORTS 263 #define IDS_NUMSG_NEEDEXT2 300 #define IDS_NUMSG_NOROMKEY 301 #define IDS_NUMSG_KSROMCRCERROR 302 @@ -355,7 +358,7 @@ #define IDC_RICHEDIT1 1091 #define IDC_RICHEDIT2 1092 #define IDC_CONTRIBUTORS 1124 -#define IDC_ASPECT 1170 +#define IDC_BLACKER_THAN_BLACK 1170 #define IDC_BLIT32 1173 #define IDC_BLITIMM 1174 #define IDC_LORES 1176 @@ -673,14 +676,13 @@ #define IDC_POWERSAVE 1612 #define IDC_AVIOUTPUT_VIDEO 1613 #define IDC_INPUTAUTOFIRE 1613 -#define IDC_MOUSETRICK 1613 +#define IDC_PORT_MOUSETRICK 1613 #define IDC_AVIOUTPUT_AUDIO 1614 #define IDC_INPUTCOPYFROM 1614 #define IDC_SANA2 1614 #define IDC_AVIOUTPUT_VIDEO_CODEC 1615 #define IDC_INPUTDEVICEDISABLE 1615 #define IDC_AVIOUTPUT_ACTIVATED 1615 -#define IDC_FILTERENABLE 1615 #define IDC_AVIOUTPUT_AUDIO_CODEC 1616 #define IDC_INPUTAMIGACNT 1616 #define IDC_FILTERHZ 1616 @@ -945,8 +947,10 @@ #define IDC_PATHS_CONFIGCACHE 1788 #define IDC_RTG_24BIT 1789 #define IDC_ASSOCIATELIST 1789 +#define IDC_PORT_TABLET 1789 #define IDC_RTG_32BIT 1790 #define IDC_ASSOCIATE_OFF 1790 +#define IDC_PORT_TABLET_FULL 1790 #define IDC_DD_SURFACETYPE 1791 #define IDC_RTG_SCALE_ALLOW 1791 #define IDC_RTG_SCALE_ASPECTRATIO 1792 @@ -997,7 +1001,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 335 #define _APS_NEXT_COMMAND_VALUE 40045 -#define _APS_NEXT_CONTROL_VALUE 1789 +#define _APS_NEXT_CONTROL_VALUE 1790 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 1f551e86..cda98441 100755 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -90,7 +90,7 @@ BEGIN EDITTEXT IDC_XSIZE,59,48,48,12,ES_NUMBER EDITTEXT IDC_YSIZE,114,48,47,12,ES_NUMBER GROUPBOX "Settings",IDC_SETTINGSTEXT,12,73,199,125 - CONTROL "Correct aspect ratio",IDC_ASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,126,92,10 + CONTROL "Blacker than black",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,126,92,10 LTEXT "Refresh:",IDC_REFRESHTEXT,18,162,28,8 CONTROL "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,157,75,20 EDITTEXT IDC_RATETEXT,124,161,77,12,ES_CENTER | ES_READONLY @@ -139,11 +139,11 @@ BEGIN RTEXT "Memory: [] Graphics card memory. Required for RTG (Picasso96) emulation.",IDC_GFXCARDTEXT,25,98,53,10,SS_NOTIFY | SS_CENTERIMAGE CONTROL "Slider1",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,94,60,20 EDITTEXT IDC_P96RAM,152,97,34,12,ES_CENTER | ES_READONLY - GROUPBOX "Advanced Memory Settings",-1,13,179,275,57 - RTEXT "Motherboard RAM (Low area):",-1,39,194,129,10,SS_CENTERIMAGE + GROUPBOX "A3000/A4000 Advanced Memory Settings",-1,13,179,275,57 + RTEXT "Motherboard Fast RAM:",-1,39,194,129,10,SS_CENTERIMAGE CONTROL "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,180,190,59,20 EDITTEXT IDC_MBRAM1,243,193,34,12,ES_CENTER | ES_READONLY - RTEXT "Motherboard RAM (High area):",-1,39,217,129,10,SS_CENTERIMAGE + RTEXT "Prosessor Slot Fast RAM:",-1,39,217,129,10,SS_CENTERIMAGE CONTROL "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,180,213,59,20 EDITTEXT IDC_MBRAM2,243,216,34,12,ES_CENTER | ES_READONLY GROUPBOX "RTG Graphics Card Settings",-1,14,81,275,95 @@ -339,39 +339,52 @@ BEGIN PUSHBUTTON "Save As...",IDC_SAVE,175,225,44,15 END -IDD_PORTS DIALOGEX 0, 0, 300, 238 +IDD_IOPORTS DIALOGEX 0, 0, 300, 208 STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN - GROUPBOX "Parallel Port",IDC_SERPARFRAME,5,2,291,68 + GROUPBOX "Parallel Port",IDC_SERPARFRAME,5,2,291,86 RTEXT "Printer:",IDC_STATIC,12,15,25,15,SS_CENTERIMAGE - COMBOBOX IDC_PRINTERLIST,49,15,153,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Flush print job",IDC_FLUSHPRINTER,220,15,58,12 - CONTROL "PostScript detection",IDC_PSPRINTERDETECT,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,11,33,79,12 - CONTROL "PostScript printer emulation",IDC_PSPRINTER,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,95,33,110,12 - RTEXT "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_NOTIFY | SS_CENTERIMAGE - EDITTEXT IDC_PRINTERAUTOFLUSH,263,33,25,12,ES_NUMBER - RTEXT "Ghostscript extra parameters:",IDC_STATIC,12,49,102,15,SS_CENTERIMAGE - EDITTEXT IDC_PS_PARAMS,124,50,165,12,ES_AUTOHSCROLL - GROUPBOX "Serial Port",IDC_SERIALFRAME,4,72,292,48 - COMBOBOX IDC_SERIAL,49,84,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,103,48,12 - CONTROL "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,103,55,12 - GROUPBOX "MIDI",IDC_MIDIFRAME,4,123,292,33 - RTEXT "Out:",IDC_MIDI,10,134,34,15,SS_CENTERIMAGE - COMBOBOX IDC_MIDIOUTLIST,50,134,95,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - RTEXT "In:",IDC_MIDI2,150,134,29,15,SS_CENTERIMAGE - COMBOBOX IDC_MIDIINLIST,185,134,95,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Mouse/Joystick Ports",IDC_PORT0,4,158,292,75 - COMBOBOX IDC_PORT0_JOYS,45,174,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_PORT1_JOYS,45,195,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "Swap ports",IDC_SWAP,211,214,75,14 - RTEXT "Port 0:",IDC_STATIC,11,173,25,15,SS_CENTERIMAGE - RTEXT "Port 1:",IDC_STATIC,11,194,25,15,SS_CENTERIMAGE - LTEXT "X-Arcade layout information []#1",IDC_STATIC,16,213,106,15,SS_NOTIFY | SS_CENTERIMAGE + COMBOBOX IDC_PRINTERLIST,49,15,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Flush print job",IDC_FLUSHPRINTER,114,51,58,12 + CONTROL "PostScript detection",IDC_PSPRINTERDETECT,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,65,35,79,12 + CONTROL "PostScript printer emulation",IDC_PSPRINTER,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,175,35,110,12 + RTEXT "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,173,49,86,15,SS_NOTIFY | SS_CENTERIMAGE + EDITTEXT IDC_PRINTERAUTOFLUSH,263,50,25,12,ES_NUMBER + RTEXT "Ghostscript extra parameters:",IDC_STATIC,12,66,102,15,SS_CENTERIMAGE + EDITTEXT IDC_PS_PARAMS,124,67,165,12,ES_AUTOHSCROLL + GROUPBOX "Serial Port",IDC_SERIALFRAME,4,92,292,48 + COMBOBOX IDC_SERIAL,49,104,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,123,48,12 + CONTROL "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,123,55,12 + GROUPBOX "MIDI",IDC_MIDIFRAME,4,143,292,50 + RTEXT "Out:",IDC_MIDI,10,154,34,15,SS_CENTERIMAGE + COMBOBOX IDC_MIDIOUTLIST,49,154,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "In:",IDC_MIDI2,10,174,29,15,SS_CENTERIMAGE + COMBOBOX IDC_MIDIINLIST,49,174,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Direct []Use when emulating serial-link games on two PCs running WinUAE",IDC_SER_DIRECT, - "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,135,103,65,12 - CONTROL "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,103,78,12 + "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,135,123,65,12 + CONTROL "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,123,78,12 +END + +IDD_GAMEPORTS DIALOGEX 0, 0, 300, 178 +STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD +FONT 8, "MS Sans Serif", 0, 0, 0x1 +BEGIN + COMBOBOX IDC_PORT0_JOYS,45,29,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_PORT1_JOYS,45,50,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Swap ports",IDC_SWAP,211,69,75,14 + RTEXT "Port 0:",IDC_STATIC,11,28,25,15,SS_CENTERIMAGE + RTEXT "Port 1:",IDC_STATIC,11,49,25,15,SS_CENTERIMAGE + LTEXT "X-Arcade layout information []#1",IDC_STATIC,16,68,106,15,SS_NOTIFY | SS_CENTERIMAGE + GROUPBOX "Mouse and Joystick settings",IDC_STATIC,4,15,292,76 + GROUPBOX "Mouse extra settings",IDC_STATIC,4,92,292,79 + RTEXT "Mouse speed:",IDC_STATIC,17,106,56,10,SS_CENTERIMAGE + EDITTEXT IDC_INPUTSPEEDM,87,106,25,12,ES_NUMBER + CONTROL "Drawing tablet support",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,113,110,10 + CONTROL "Full tablet input emulation",IDC_PORT_TABLET_FULL, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,127,110,10 + CONTROL "Magic Mouse",IDC_PORT_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,21,122,119,10 END IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242 @@ -438,8 +451,7 @@ BEGIN COMBOBOX IDC_LANGUAGE,103,121,179,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP GROUPBOX "Language",IDC_STATIC,7,113,285,25 CONTROL "Disable powersaving features",IDC_POWERSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,92,120,10 - CONTROL "Magic Mouse",IDC_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,66,119,10 - CONTROL "uaenet.device",IDC_SANA2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,79,94,10 + CONTROL "uaenet.device",IDC_SANA2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,66,94,10 COMBOBOX IDC_DD_SURFACETYPE,217,93,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP RTEXT "Display buffer:",IDC_STATIC,159,94,52,10,SS_CENTERIMAGE END @@ -662,8 +674,6 @@ BEGIN EDITTEXT IDC_INPUTSPEEDD,215,195,25,12,ES_NUMBER RTEXT "Analog joy-mouse speed:",-1,120,212,88,10,SS_CENTERIMAGE EDITTEXT IDC_INPUTSPEEDA,215,211,25,12,ES_NUMBER - RTEXT "Mouse speed:",-1,132,228,76,10,SS_CENTERIMAGE - EDITTEXT IDC_INPUTSPEEDM,215,227,25,12,ES_NUMBER PUSHBUTTON "Copy from:",IDC_INPUTCOPY,249,195,45,14 COMBOBOX IDC_INPUTCOPYFROM,249,211,45,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Swap 1<>2",IDC_INPUTSWAP,249,226,45,14 @@ -674,9 +684,8 @@ STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN GROUPBOX "Filter Settings",-1,0,0,294,186 - CONTROL "Enable",IDC_FILTERENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,16,40,11 - COMBOBOX IDC_FILTERMODE,53,15,83,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_FILTERFILTER,142,15,74,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_FILTERMODE,20,15,103,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_FILTERFILTER,132,15,83,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Reset to defaults",IDC_FILTERDEFAULT,221,15,67,14 RTEXT "Horiz. size:",-1,7,44,54,10,SS_CENTERIMAGE CONTROL "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,37,152,19 @@ -703,7 +712,7 @@ BEGIN COMBOBOX IDC_FILTERVZMULT,67,63,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP CONTROL "Autoscale",IDC_FILTERAUTORES,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,168,83,10 COMBOBOX IDC_FILTERXTRA,105,134,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_FILTERASPECT,21,118,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_FILTERASPECT,20,118,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP CONTROL "Keep aspect ratio",IDC_FILTERKEEPASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,153,85,10 END @@ -925,7 +934,8 @@ IDI_FLOPPY ICON "35floppy.ico" IDI_ABOUT ICON "amigainfo.ico" IDI_HARDDISK ICON "Drive.ico" IDI_CPU ICON "cpu.ico" -IDI_PORTS ICON "joystick.ico" +IDI_GAMEPORTS ICON "joystick.ico" +IDI_IOPORTS ICON "joystick.ico" IDI_INPUT ICON "joystick.ico" IDI_MISC1 ICON "misc.ico" IDI_MISC2 ICON "misc.ico" @@ -1081,6 +1091,22 @@ IDR_DRIVE_SPINND_A500_1 WAVE "drive_spinnd.wav" IDB_XARCADE BITMAP "xarcade-winuae.bmp" IDB_LCD160X43 BITMAP "lcd.bmp" +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_IOPORTS, DIALOG + BEGIN + BOTTOMMARGIN, 180 + END +END +#endif // APSTUDIO_INVOKED + + ///////////////////////////////////////////////////////////////////////////// // // String Table @@ -1096,7 +1122,7 @@ BEGIN IDS_ABOUT "About" IDS_LOADSAVE "Configurations" IDS_AVIOUTPUT "Output" - IDS_PORTS "Game & IO ports" + IDS_IOPORTS "IO ports" IDS_MISC1 "Miscellaneous" IDS_MEMORY "RAM" IDS_CPU "CPU and FPU" @@ -1112,6 +1138,7 @@ BEGIN IDS_QUICKSTART "Quickstart" IDS_FRONTEND "Frontend" IDS_CHIPSET2 "Adv. Chipset" + IDS_GAMEPORTS "Game ports" END STRINGTABLE diff --git a/od-win32/serial_win32.c b/od-win32/serial_win32.c index be908d1d..b8eb15bb 100755 --- a/od-win32/serial_win32.c +++ b/od-win32/serial_win32.c @@ -203,16 +203,6 @@ void serial_hsynchandler (void) checksend (0); } -/* Not (fully) implemented yet: (on windows this work) - * - * - Something's wrong with the Interrupts. - * (NComm works, TERM does not. TERM switches to a - * blind mode after a connect and wait's for the end - * of an asynchronous read before switching blind - * mode off again. It never gets there on UAE :-< ) - * - */ - void SERDAT (uae_u16 w) { serdat = w; @@ -278,7 +268,7 @@ void serial_check_irq (void) INTREQ_0 (0x8000 | 0x0800); } -void serial_dtr_on(void) +void serial_dtr_on (void) { #if SERIALHSDEBUG > 0 write_log ( "SERIAL: DTR on\n" ); @@ -291,7 +281,7 @@ void serial_dtr_on(void) #endif } -void serial_dtr_off(void) +void serial_dtr_off (void) { #if SERIALHSDEBUG > 0 write_log ( "SERIAL: DTR off\n" ); @@ -304,13 +294,13 @@ void serial_dtr_off(void) #endif } -void serial_flush_buffer(void) +void serial_flush_buffer (void) { } static uae_u8 oldserbits; -static void serial_status_debug(char *s) +static void serial_status_debug (char *s) { #if SERIALHSDEBUG > 1 write_log ("%s: DTR=%d RTS=%d CD=%d CTS=%d DSR=%d\n", s, @@ -319,7 +309,7 @@ static void serial_status_debug(char *s) #endif } -uae_u8 serial_readstatus(uae_u8 dir) +uae_u8 serial_readstatus (uae_u8 dir) { int status = 0; uae_u8 serbits = oldserbits; @@ -442,7 +432,7 @@ uae_u8 serial_writestatus (uae_u8 newstate, uae_u8 dir) return oldserbits; } -void serial_open(void) +void serial_open (void) { #ifdef SERIAL_PORT if (serdev) @@ -459,7 +449,7 @@ void serial_open(void) void serial_close (void) { #ifdef SERIAL_PORT - closeser(); + closeser (); serdev = 0; #endif } diff --git a/od-win32/sysconfig.h b/od-win32/sysconfig.h index 6b076c06..dccea6db 100755 --- a/od-win32/sysconfig.h +++ b/od-win32/sysconfig.h @@ -41,7 +41,8 @@ #define UAESERIAL /* uaeserial.device emulation */ #define FPUEMU /* FPU emulation */ #define FPU_UAE -#define MMUEMU +#define MMUEMU /* Aranym 68040 MMU */ +#define FULLMMU /* Aranym 68040 MMU */ #define CPUEMU_0 /* generic 680x0 emulation */ #define CPUEMU_11 /* 68000+prefetch emulation */ #define CPUEMU_12 /* cycle-exact cpu&blitter */ diff --git a/od-win32/win32.c b/od-win32/win32.c index c4b81544..e9f6f8b7 100755 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -31,6 +31,12 @@ #include #include +#include "resource" + +#include +#include "wintablet.h" +#include + #include "sysdeps.h" #include "options.h" #include "audio.h" @@ -53,7 +59,6 @@ #include "win32gfx.h" #include "registry.h" #include "win32gui.h" -#include "resource.h" #include "autoconf.h" #include "gui.h" #include "sys/mman.h" @@ -103,6 +108,7 @@ static UINT TaskbarRestart; static HWND TaskbarRestartHWND; static int forceroms; static int start_data = 0; +static void *tablet; char VersionStr[256]; char BetaStr[64]; @@ -336,7 +342,12 @@ static void setcursor (int oldx, int oldy) int y = (amigawin_rect.bottom - amigawin_rect.top) / 2; mouseposx = oldx - x; mouseposy = oldy - y; -// write_log ("%d %d %d %d %d - %d %d %d %d %d\n", + + if (currprefs.input_magic_mouse && currprefs.input_tablet > 0) { + mouseposx = mouseposy = 0; + return; + } +// write_log ("%d %d %d %d %d - %d %d %d %d %d\n", // x, amigawin_rect.left, amigawin_rect.right, mouseposx, oldx, // y, amigawin_rect.top, amigawin_rect.bottom, mouseposy, oldy); if (oldx >= 30000 || oldy >= 30000 || oldx <= -30000 || oldy <= -30000) { @@ -491,12 +502,10 @@ void setmouseactive (int active) //write_log ("setmouseactive(%d)\n", active); releasecapture (); recapture = 0; -#if 0 - if (active > 0 && mousehack_allowed () && mousehack_alive ()) { - if (isfullscreen () <= 0) - return; - } -#endif + + if (currprefs.input_magic_mouse && currprefs.input_tablet > 0) + return; + if (mouseactive > 0) focus = 1; if (focus) { @@ -650,10 +659,10 @@ void disablecapture (void) setmouseactive (0); } -extern void setamigamouse (int,int); void setmouseactivexy (int x, int y, int dir) { int diff = 8; + if (isfullscreen () > 0) return; x += amigawin_rect.left; @@ -692,6 +701,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, { HDC hDC; int mx, my; + int istablet = (GetMessageExtraInfo () & 0xFFFFFF00) == 0xFF515700; static int mm, minimized, recursive, ignoremousemove; #if MSGDEBUG > 1 @@ -767,7 +777,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, minimizewindow (); #endif if (mouseactive) - setmouseactive(0); + setmouseactive (0); } else { if (dinput_winmouse () >= 0) setmousebuttonstate (dinput_winmouse (), 2, 1); @@ -850,9 +860,11 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, rp_set_hwnd (hWnd); #endif DragAcceptFiles (hWnd, TRUE); + tablet = open_tablet (hWnd); return 0; case WM_DESTROY: + close_tablet (tablet); inputdevice_unacquire (); dinput_window (); return 0; @@ -882,28 +894,50 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, } break; + case WM_SETCURSOR: + { + static HCURSOR oldcursor; + if ((HWND)wParam == hAmigaWnd && currprefs.input_tablet > 0 && currprefs.input_magic_mouse) { + if (oldcursor == NULL) + oldcursor = LoadCursor (NULL, IDC_ARROW); + if (picasso_on) { + picasso_setwincursor (); + return 1; + } else { + SetCursor (oldcursor); + return 1; + } + } + break; + } + + case WM_MOUSEMOVE: { + int wm = dinput_winmouse (); mx = (signed short) LOWORD (lParam); my = (signed short) HIWORD (lParam); mx -= mouseposx; my -= mouseposy; if (recapture && isfullscreen () <= 0) { setmouseactive (1); - setamigamouse (mx, my); return 0; } - if (dinput_winmouse () >= 0) { - if (dinput_winmousemode ()) { - /* absolute + mousehack */ + if (wm < 0 && (istablet || currprefs.input_tablet >= TABLET_MOUSEHACK)) { + /* absolute */ + setmousestate (0, 0, mx, 1); + setmousestate (0, 1, my, 1); + return 0; + } + if (wm >= 0) { + if (istablet || currprefs.input_tablet >= TABLET_MOUSEHACK) { + /* absolute */ setmousestate (dinput_winmouse (), 0, mx, 1); setmousestate (dinput_winmouse (), 1, my, 1); return 0; } if (!focus) return DefWindowProc (hWnd, message, wParam, lParam); - } - if (dinput_winmouse () >= 0) { if (dinput_winmousemode () == 0) { /* relative */ int mxx = (amigawin_rect.right - amigawin_rect.left) / 2; @@ -1105,6 +1139,38 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, } break; + case WT_PROXIMITY: + { + send_tablet_proximity (LOWORD (lParam) ? 1 : 0); + return 0; + } + case WT_PACKET: + { + PACKET pkt; + if (inputdevice_is_tablet () <= 0) { + close_tablet (tablet); + tablet = NULL; + return 0; + } + if (WTPacket ((HCTX)lParam, wParam, &pkt)) { + int x, y, z, pres, proxi; + DWORD buttons; + ORIENTATION ori; + ROTATION rot; + + x = pkt.pkX; + y = pkt.pkY; + z = pkt.pkZ; + pres = pkt.pkNormalPressure; + ori = pkt.pkOrientation; + rot = pkt.pkRotation; + buttons = pkt.pkButtons; + proxi = pkt.pkStatus; + send_tablet (x, y, z, pres, buttons, proxi, ori.orAzimuth, ori.orAltitude, ori.orTwist, rot.roPitch, rot.roRoll, rot.roYaw, &amigawin_rect); + + } + return 0; + } default: break; @@ -1173,6 +1239,7 @@ static LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT message, WPARAM wParam, case WM_COMMAND: case WM_NOTIFY: case WM_ENABLE: + case WT_PACKET: return AmigaWindowProc (hWnd, message, wParam, lParam); case WM_DISPLAYCHANGE: @@ -1421,7 +1488,7 @@ static int WIN32_RegisterClasses (void) wc.cbWndExtra = DLGWINDOWEXTRA; wc.hInstance = 0; wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE (IDI_APPICON)); - wc.hCursor = LoadCursor (NULL, IDC_ARROW); + wc.hCursor = NULL; //LoadCursor (NULL, IDC_ARROW); wc.lpszMenuName = 0; wc.lpszClassName = "AmigaPowah"; wc.hbrBackground = CreateSolidBrush (g_dwBackgroundColor); @@ -1434,7 +1501,7 @@ static int WIN32_RegisterClasses (void) wc.cbWndExtra = DLGWINDOWEXTRA; wc.hInstance = 0; wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE (IDI_APPICON)); - wc.hCursor = LoadCursor (NULL, IDC_ARROW); + wc.hCursor = NULL; //LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = CreateSolidBrush (black); wc.lpszMenuName = 0; wc.lpszClassName = "PCsuxRox"; @@ -1447,7 +1514,7 @@ static int WIN32_RegisterClasses (void) wc.cbWndExtra = DLGWINDOWEXTRA; wc.hInstance = 0; wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE (IDI_APPICON)); - wc.hCursor = LoadCursor (NULL, IDC_ARROW); + wc.hCursor = NULL; //LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = CreateSolidBrush (g_dwBackgroundColor); wc.lpszMenuName = 0; wc.lpszClassName = "Useless"; @@ -1721,11 +1788,6 @@ int debuggable (void) return 0; } -int mousehack_allowed (void) -{ - return dinput_winmouse () > 0 && dinput_winmousemode (); -} - void toggle_mousegrab (void) { } @@ -1947,7 +2009,6 @@ void target_default_options (struct uae_prefs *p, int type) p->win32_uaescsimode = get_aspi (p->win32_uaescsimode); p->win32_borderless = 0; p->win32_powersavedisabled = 1; - p->win32_outsidemouse = 0; p->sana2 = 0; p->win32_rtgmatchdepth = 1; p->win32_rtgscaleifsmall = 1; @@ -1972,7 +2033,6 @@ static const char *scsimode[] = { "none", "SPTI", "SPTI+SCSISCAN", "AdaptecASPI" void target_save_options (struct zfile *f, struct uae_prefs *p) { cfgfile_target_dwrite (f, "middle_mouse=%s\n", p->win32_middle_mouse ? "true" : "false"); - cfgfile_target_dwrite (f, "magic_mouse=%s\n", p->win32_outsidemouse ? "true" : "false"); cfgfile_target_dwrite (f, "logfile=%s\n", p->win32_logfile ? "true" : "false"); cfgfile_target_dwrite (f, "map_drives=%s\n", p->win32_automount_drives ? "true" : "false"); cfgfile_target_dwrite (f, "map_drives_auto=%s\n", p->win32_automount_removable ? "true" : "false"); @@ -2033,7 +2093,7 @@ static int fetchpri (int pri, int defpri) static const char *obsolete[] = { "killwinkeys", "sound_force_primary", "iconified_highpriority", "sound_sync", "sound_tweak", "directx6", "sound_style", - "file_path", "iconified_nospeed", "activepriority", + "file_path", "iconified_nospeed", "activepriority", "magic_mouse", 0 }; @@ -2062,7 +2122,6 @@ int target_parse_option (struct uae_prefs *p, char *option, char *value) || cfgfile_yesno (option, value, "notaskbarbutton", &p->win32_notaskbarbutton) || cfgfile_yesno (option, value, "always_on_top", &p->win32_alwaysontop) || cfgfile_yesno (option, value, "powersavedisabled", &p->win32_powersavedisabled) - || cfgfile_yesno (option, value, "magic_mouse", &p->win32_outsidemouse) || cfgfile_intval (option, value, "specialkey", &p->win32_specialkey, 1) || cfgfile_intval (option, value, "guikey", &p->win32_guikey, 1) || cfgfile_intval (option, value, "kbledmode", &p->win32_kbledmode, 1) @@ -2902,7 +2961,7 @@ static int dxdetect (void) #endif } -int os_winnt, os_winnt_admin, os_64bit, os_vista, os_winxp; +int os_winnt, os_winnt_admin, os_64bit, os_win7, os_vista, os_winxp; static int isadminpriv (void) { @@ -2968,10 +3027,6 @@ static int osdetect (void) { PGETNATIVESYSTEMINFO pGetNativeSystemInfo; PISUSERANADMIN pIsUserAnAdmin; - os_winnt = 0; - os_winnt_admin = 0; - os_vista = 0; - os_64bit = 0; pGetNativeSystemInfo = (PGETNATIVESYSTEMINFO)GetProcAddress ( GetModuleHandle ("kernel32.dll"), "GetNativeSystemInfo"); @@ -2998,6 +3053,8 @@ static int osdetect (void) os_winxp = 1; if (osVersion.dwMajorVersion >= 6) os_vista = 1; + if (osVersion.dwMajorVersion >= 7 || (osVersion.dwMajorVersion == 6 && osVersion.dwMinorVersion >= 1)) + os_win7 = 1; if (SystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) os_64bit = 1; } diff --git a/od-win32/win32.h b/od-win32/win32.h index a403ae0f..ba380c95 100755 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -17,8 +17,8 @@ #define WINUAEPUBLICBETA 1 -#define WINUAEBETA "4" -#define WINUAEDATE MAKEBD(2008, 12, 6) +#define WINUAEBETA "5" +#define WINUAEDATE MAKEBD(2008, 12, 26) #define WINUAEEXTRA "" #define WINUAEREV "" @@ -111,6 +111,10 @@ extern int dinput_winmouse (void); extern int dinput_wheelbuttonstart (void); extern int dinput_winmousemode (void); extern void dinput_window (void); +extern void *open_tablet (HWND hwnd); +extern int close_tablet (void*); +extern void send_tablet (int x, int y, int z, int pres, uae_u32 buttons, int flags, int ax, int ay, int az, int rx, int ry, int rz, RECT *r); +extern void send_tablet_proximity (int); void addnotifications (HWND hwnd, int remove); int win32_hardfile_media_change (const char *drvname, int inserted); diff --git a/od-win32/win32_scale2x.c b/od-win32/win32_scale2x.c index 8be57862..4e4dc5ea 100755 --- a/od-win32/win32_scale2x.c +++ b/od-win32/win32_scale2x.c @@ -13,6 +13,7 @@ #include "gfxfilter.h" #include "dxwrap.h" #include "statusline.h" +#include "drawing.h" struct uae_filter uaefilters[] = { @@ -37,11 +38,45 @@ struct uae_filter uaefilters[] = { 0 } }; +static int filteroffsetx, filteroffsety, filterxmult = 1000, filterymult = 1000; +static int dst_width, dst_height, amiga_width, amiga_height, amiga_depth, dst_depth, scale; +static int temp_width, temp_height; +uae_u8 *bufmem_ptr; +static LPDIRECTDRAWSURFACE7 tempsurf; +static uae_u8 *tempsurf2, *tempsurf3; +static int cleartemp; +static uae_u32 rc[256], gc[256], bc[256]; + +void getfilteroffset (int *dx, int *dy, int *mx, int *my) +{ + *dx = (dst_width - amiga_width * 1000 / filterxmult) / 2; + *dy = (dst_height - amiga_height * 1000 / filterymult) / 2; + *mx = filterxmult; + *my = filterymult; +} + +static int vblscale (int v) +{ + static int o; + int n; + + n = (beamcon0 & 0x80) + maxvpos; + if (n != o) + cleartemp = 1; + o = n; + if (beamcon0 & 0x80) + return v; + v = v * maxvpos / MAXVPOS_PAL; + return v; +} uae_u8 *getfilterrect1 (RECT *sr, RECT *dr, int dst_depth, int aw, int ah, int scale, int temp_width, int temp_height, uae_u8 *dptr, int pitch) { - int aws = aw * scale; - int ahs = ah * scale; + int aws, ahs; + + ah = vblscale (ah); + aws = aw * scale; + ahs = ah * scale; SetRect (sr, 0, 0, 0, 0); dr->left = sr->left + (temp_width - aws) /2; @@ -53,11 +88,16 @@ uae_u8 *getfilterrect1 (RECT *sr, RECT *dr, int dst_depth, int aw, int ah, int s void getfilterrect2 (RECT *sr, RECT *dr, int dst_width, int dst_height, int aw, int ah, int scale, int temp_width, int temp_height) { - int aws = aw * scale; - int ahs = ah * scale; + int aws, ahs; int xs, ys; int xmult, ymult; - int v; + int v, xy; + + xy = 1; + + ah = vblscale (ah); + aws = aw * scale; + ahs = ah * scale; SetRect (sr, 0, 0, dst_width, dst_height); dr->left = (temp_width - aws) /2; @@ -67,22 +107,77 @@ void getfilterrect2 (RECT *sr, RECT *dr, int dst_width, int dst_height, int aw, dr->right = dr->left + dst_width; dr->bottom = dr->top + dst_height; - v = currprefs.gfx_filter ? currprefs.gfx_filter_horiz_offset : 0; - OffsetRect (dr, (int)(-v * aws / 1000.0), 0); - v = currprefs.gfx_filter ? currprefs.gfx_filter_vert_offset : 0; - OffsetRect (dr, 0, (int)(-v * ahs / 1000.0)); xmult = currprefs.gfx_filter_horiz_zoom_mult; - if (xmult <= 0) - xmult = aws * 1000 / dst_width; - else - xmult = xmult + xmult * currprefs.gfx_filter_horiz_zoom / 2000; - ymult = currprefs.gfx_filter_vert_zoom_mult; - if (ymult <= 0) + if (currprefs.gfx_filter_autoscale) { + int w, h, x, y, v; + int extraw = currprefs.gfx_filter_horiz_zoom; + int extrah = currprefs.gfx_filter_vert_zoom; + static int oxmult, oymult; + xmult = 1000; + ymult = 1000; + v = get_custom_limits (&w, &h, &x, &y); + if (v) { + int diff; + dr->left = (temp_width - aws) /2; + dr->top = (temp_height - ahs) / 2; + dr->right = dr->left + dst_width * scale; + dr->bottom = dr->top + dst_height * scale; + OffsetRect (dr, x * scale, y * scale); + dr->right -= (dst_width - w) * scale; + dr->bottom -= (dst_height - h) * scale; + dr->left -= dst_width * extraw / 1000; + dr->top -= dst_width * extrah / 1000; + dr->right += dst_width * extraw / 1000; + dr->bottom += dst_width * extrah / 1000; + + if (currprefs.gfx_filter_keep_aspect || currprefs.gfx_filter_aspect > 0) { + int xratio = dst_width * 256 / w; + int yratio = dst_height * 256 / h; + int diffx = dr->right - dr->left; + int diffy = dr->bottom - dr->top; + + if (currprefs.gfx_filter_aspect > 0) { + int xm = (currprefs.gfx_filter_aspect >> 8) * 256; + int ym = (currprefs.gfx_filter_aspect & 0xff) * 256; + xratio = xratio * ((dst_width * ym * 256) / (dst_height * xm)) / 256; + } + + if (xratio > yratio) { + diff = diffx - diffx * yratio / xratio; + dr->right += diff; + dr->left -= diff; + } else { + diff = diffx - diffx * xratio / yratio; + dr->bottom += diff; + dr->top -= diff; + } + } + diff = dr->right - dr->left; + filterxmult = diff * 1000 / dst_width; + diff = dr->bottom - dr->top; + filterymult = diff * 1000 / dst_height; + return; + } + } else if (currprefs.gfx_filter_keep_aspect && !xmult && !ymult) { + xmult = aws * 1000 / dst_width; ymult = ahs * 1000 / dst_height; - else - ymult = ymult + ymult * currprefs.gfx_filter_vert_zoom / 2000; + if (xmult < ymult) + xmult = ymult; + else + ymult = xmult; + ymult = vblscale (ymult); + } else { + if (xmult <= 0) + xmult = aws * 1000 / dst_width; + else + xmult = xmult + xmult * currprefs.gfx_filter_horiz_zoom / 2000; + if (ymult <= 0) + ymult = ahs * 1000 / dst_height; + else + ymult = ymult + ymult * currprefs.gfx_filter_vert_zoom / 2000; + } if (currprefs.gfx_filter_aspect > 0) { int srcratio, dstratio; @@ -94,6 +189,13 @@ void getfilterrect2 (RECT *sr, RECT *dr, int dst_width, int dst_height, int aw, ymult = ymult * dstratio / srcratio; } + if (xy) { + v = currprefs.gfx_filter ? currprefs.gfx_filter_horiz_offset : 0; + OffsetRect (dr, (int)(-v * aws / 1000.0), 0); + v = currprefs.gfx_filter ? currprefs.gfx_filter_vert_offset : 0; + OffsetRect (dr, 0, (int)(-v * ahs / 1000.0)); + } + xs = dst_width - dst_width * xmult / 1000; dr->left += xs / 2; dr->right -= xs / 2; @@ -101,14 +203,10 @@ void getfilterrect2 (RECT *sr, RECT *dr, int dst_width, int dst_height, int aw, ys = dst_height - dst_height * ymult / 1000; dr->top += ys / 2; dr->bottom -= ys / 2; -} -static int dst_width, dst_height, amiga_width, amiga_height, amiga_depth, dst_depth, scale; -static int temp_width, temp_height; -uae_u8 *bufmem_ptr; -static LPDIRECTDRAWSURFACE7 tempsurf; -static uae_u8 *tempsurf2, *tempsurf3; -static uae_u32 rc[256], gc[256], bc[256]; + filterxmult = xmult; + filterymult = ymult; +} static void statusline (void) { @@ -151,6 +249,10 @@ void S2X_free (void) tempsurf2 = 0; xfree (tempsurf3); tempsurf3 = 0; + filteroffsetx = 0; + filteroffsety = 0; + filterxmult = 1000; + filterymult = 1000; } void S2X_init (int dw, int dh, int aw, int ah, int mult, int ad, int dd) @@ -194,6 +296,9 @@ void S2X_init (int dw, int dh, int aw, int ah, int mult, int ad, int dd) amiga_depth = ad; scale = mult; + filteroffsetx = (dst_width - amiga_width) / 2; + filteroffsety = (dst_height - amiga_height) / 2; + temp_width = dst_width * 3; if (temp_width > dxcaps.maxwidth) temp_width = dxcaps.maxwidth; @@ -244,6 +349,10 @@ void S2X_render (void) endsptr = gfxvidinfo.bufmemend; bufmem_ptr = sptr; + if (cleartemp) { + clearsurface (tempsurf); + cleartemp = 0; + } if (!locksurface (tempsurf, &desc)) return; pitch = desc.lPitch; @@ -375,8 +484,8 @@ end: getfilterrect2 (&sr, &dr, dst_width, dst_height, amiga_width, amiga_height, scale, temp_width, temp_height); if (dr.left >= 0 && dr.top >= 0 && dr.right < temp_width && dr.bottom < temp_height) { - if (dr.left < dr.right && dr.top < dr.bottom) - DirectDraw_BlitRect (NULL, &sr, tempsurf, &dr); + if (dr.left < dr.right && dr.top < dr.bottom) + DirectDraw_BlitRect (NULL, &sr, tempsurf, &dr); } statusline (); } diff --git a/od-win32/win32gfx.c b/od-win32/win32gfx.c index 3bd5a963..3818da2e 100755 --- a/od-win32/win32gfx.c +++ b/od-win32/win32gfx.c @@ -18,6 +18,9 @@ #include #include "sysdeps.h" + +#include "resource" + #include "options.h" #include "audio.h" #include "uae.h" @@ -35,7 +38,6 @@ #include "win32.h" #include "win32gfx.h" #include "win32gui.h" -#include "resource.h" #include "sound.h" #include "inputdevice.h" #include "opengl.h" @@ -196,6 +198,18 @@ struct MultiDisplay *getdisplay (struct uae_prefs *p) return &Displays[display]; } +void desktop_coords (int *dw, int *dh, int *ax, int *ay, int *aw, int *ah) +{ + struct MultiDisplay *md = getdisplay (&currprefs); + + *dw = md->rect.right - md->rect.left; + *dh = md->rect.bottom - md->rect.top; + *ax = amigawin_rect.left; + *ay = amigawin_rect.top; + *aw = amigawin_rect.right - *ax; + *ah = amigawin_rect.bottom - *ay; +} + void centerdstrect (RECT *dr) { if(!(currentmode->flags & (DM_DX_FULLSCREEN | DM_D3D_FULLSCREEN | DM_W_FULLSCREEN))) @@ -212,6 +226,33 @@ void centerdstrect (RECT *dr) } } +static int picasso_offset_x, picasso_offset_y, picasso_offset_mx, picasso_offset_my; + +void getgfxoffset (int *dxp, int *dyp, int *mxp, int *myp) +{ + int dx, dy; + + getfilteroffset (&dx, &dy, mxp, myp); + *dxp = dx; + *dyp = dy; + if (picasso_on) { + dx = picasso_offset_x; + dy = picasso_offset_y; + *mxp = picasso_offset_mx; + *myp = picasso_offset_my; + } else if (currentmode->flags & DM_W_FULLSCREEN) { + if (scalepicasso && screen_is_picasso) + return; + if (usedfilter && !screen_is_picasso) + return; + if (currentmode->fullfill && (currentmode->current_width > currentmode->native_width || currentmode->current_height > currentmode->native_height)) + return; + dx += (currentmode->native_width - currentmode->current_width) / 2; + dy += (currentmode->native_height - currentmode->current_height) / 2; + } + *dxp = dx; + *dyp = dy; +} void DX_Fill (int dstx, int dsty, int width, int height, uae_u32 color) { @@ -733,6 +774,10 @@ static void DX_Blit96 (int x, int y, int w, int h) { RECT dr, sr; + picasso_offset_x = 0; + picasso_offset_y = 0; + picasso_offset_mx = 1000; + picasso_offset_my = 1000; if (scalepicasso) { int srcratio, dstratio; SetRect (&sr, 0, 0, picasso96_state.Width, picasso96_state.Height); @@ -758,10 +803,14 @@ static void DX_Blit96 (int x, int y, int w, int h) } else if (srcratio > dstratio) { int yy = currentmode->native_height - currentmode->native_height * dstratio / srcratio; SetRect (&dr, 0, yy / 2, currentmode->native_width, currentmode->native_height - yy / 2); + picasso_offset_y = yy / 2; } else { int xx = currentmode->native_width - currentmode->native_width * srcratio / dstratio; SetRect (&dr, xx / 2, 0, currentmode->native_width - xx / 2, currentmode->native_height); + picasso_offset_x = xx / 2; } + picasso_offset_mx = picasso96_state.Width * 1000 / (dr.right - dr.left); + picasso_offset_my = picasso96_state.Height * 1000 / (dr.bottom - dr.top); DirectDraw_BlitToPrimaryScale (&dr, &sr); } else { SetRect (&sr, x, y, x + w, y + h); @@ -1037,6 +1086,8 @@ int check_prefs_changed_gfx (void) c |= currprefs.gfx_lores_mode != changed_prefs.gfx_lores_mode ? (2 | 8) : 0; c |= currprefs.gfx_display != changed_prefs.gfx_display ? (2|4|8) : 0; c |= strcmp (currprefs.gfx_display_name, changed_prefs.gfx_display_name) ? (2|4|8) : 0; + c |= currprefs.gfx_blackerthanblack != changed_prefs.gfx_blackerthanblack ? (2 | 8) : 0; + c |= currprefs.win32_alwaysontop != changed_prefs.win32_alwaysontop ? 32 : 0; c |= currprefs.win32_notaskbarbutton != changed_prefs.win32_notaskbarbutton ? 32 : 0; c |= currprefs.win32_borderless != changed_prefs.win32_borderless ? 32 : 0; @@ -1095,6 +1146,8 @@ int check_prefs_changed_gfx (void) currprefs.gfx_linedbl = changed_prefs.gfx_linedbl; currprefs.gfx_display = changed_prefs.gfx_display; strcpy (currprefs.gfx_display_name, changed_prefs.gfx_display_name); + currprefs.gfx_blackerthanblack = changed_prefs.gfx_blackerthanblack; + currprefs.win32_alwaysontop = changed_prefs.win32_alwaysontop; currprefs.win32_notaskbarbutton = changed_prefs.win32_notaskbarbutton; currprefs.win32_borderless = changed_prefs.win32_borderless; @@ -1129,7 +1182,7 @@ int check_prefs_changed_gfx (void) return 1; } - if (currprefs.gfx_correct_aspect != changed_prefs.gfx_correct_aspect || + if (currprefs.gfx_filter_autoscale != changed_prefs.gfx_filter_autoscale || currprefs.gfx_xcenter_pos != changed_prefs.gfx_xcenter_pos || currprefs.gfx_ycenter_pos != changed_prefs.gfx_ycenter_pos || currprefs.gfx_xcenter_size != changed_prefs.gfx_xcenter_size || @@ -1137,7 +1190,7 @@ int check_prefs_changed_gfx (void) currprefs.gfx_xcenter != changed_prefs.gfx_xcenter || currprefs.gfx_ycenter != changed_prefs.gfx_ycenter) { - currprefs.gfx_correct_aspect = changed_prefs.gfx_correct_aspect; + currprefs.gfx_filter_autoscale = changed_prefs.gfx_filter_autoscale; currprefs.gfx_xcenter_pos = changed_prefs.gfx_xcenter_pos; currprefs.gfx_ycenter_pos = changed_prefs.gfx_ycenter_pos; currprefs.gfx_xcenter_size = changed_prefs.gfx_xcenter_size; @@ -1240,12 +1293,8 @@ int check_prefs_changed_gfx (void) #endif } - if (currprefs.win32_automount_drives != changed_prefs.win32_automount_drives || - currprefs.win32_outsidemouse != changed_prefs.win32_outsidemouse || - currprefs.win32_powersavedisabled != changed_prefs.win32_powersavedisabled) { + if (currprefs.win32_powersavedisabled != changed_prefs.win32_powersavedisabled) { - currprefs.win32_outsidemouse = changed_prefs.win32_outsidemouse; - currprefs.win32_automount_drives = changed_prefs.win32_automount_drives; currprefs.win32_powersavedisabled = changed_prefs.win32_powersavedisabled; } return 0; diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index e386f012..6f27dbbc 100755 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -31,7 +31,7 @@ #include #include -#include "resource.h" +#include "resource" #include "sysconfig.h" #include "sysdeps.h" #include "gui.h" @@ -135,7 +135,7 @@ static int C_PAGES; #define MAX_C_PAGES 30 static int LOADSAVE_ID = -1, MEMORY_ID = -1, KICKSTART_ID = -1, CPU_ID = -1, DISPLAY_ID = -1, HW3D_ID = -1, CHIPSET_ID = -1, CHIPSET2_ID = -1, SOUND_ID = -1, FLOPPY_ID = -1, DISK_ID = -1, - HARDDISK_ID = -1, PORTS_ID = -1, INPUT_ID = -1, MISC1_ID = -1, MISC2_ID = -1, AVIOUTPUT_ID = -1, + HARDDISK_ID = -1, IOPORTS_ID = -1, GAMEPORTS_ID = -1, INPUT_ID = -1, MISC1_ID = -1, MISC2_ID = -1, AVIOUTPUT_ID = -1, PATHS_ID = -1, QUICKSTART_ID = -1, ABOUT_ID = -1, FRONTEND_ID = -1; static HWND pages[MAX_C_PAGES]; #define MAX_IMAGETOOLTIPS 10 @@ -4659,7 +4659,7 @@ static void values_to_displaydlg (HWND hDlg) SendDlgItemMessage(hDlg, IDC_LORES, CB_ADDSTRING, 0, (LPARAM)"SuperHires"); SendDlgItemMessage (hDlg, IDC_LORES, CB_SETCURSEL, workprefs.gfx_resolution, 0); - CheckDlgButton (hDlg, IDC_ASPECT, workprefs.gfx_correct_aspect); + CheckDlgButton (hDlg, IDC_BLACKER_THAN_BLACK, workprefs.gfx_blackerthanblack); CheckDlgButton (hDlg, IDC_LORES_SMOOTHED, workprefs.gfx_lores_mode); CheckDlgButton (hDlg, IDC_XCENTER, workprefs.gfx_xcenter); @@ -4711,7 +4711,7 @@ static void values_from_displaydlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l &workprefs.gfx_pfullscreen, &workprefs.gfx_pvsync, 1); workprefs.gfx_lores_mode = IsDlgButtonChecked (hDlg, IDC_LORES_SMOOTHED); - workprefs.gfx_correct_aspect = IsDlgButtonChecked (hDlg, IDC_ASPECT); + workprefs.gfx_blackerthanblack = IsDlgButtonChecked (hDlg, IDC_BLACKER_THAN_BLACK); workprefs.gfx_linedbl = (IsDlgButtonChecked(hDlg, IDC_LM_SCANLINES) ? 2 : IsDlgButtonChecked(hDlg, IDC_LM_DOUBLED) ? 1 : 0); @@ -6116,7 +6116,6 @@ static void values_to_miscdlg (HWND hDlg) workprefs.catweasel = 0; CheckDlgButton (hDlg, IDC_CATWEASEL, workprefs.catweasel); CheckDlgButton (hDlg, IDC_STATE_CAPTURE, workprefs.statecapture); - CheckDlgButton (hDlg, IDC_MOUSETRICK, workprefs.win32_outsidemouse); misc_kbled (hDlg, IDC_KBLED1, workprefs.keyboard_leds[0]); misc_kbled (hDlg, IDC_KBLED2, workprefs.keyboard_leds[1]); @@ -6353,9 +6352,6 @@ static INT_PTR MiscDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) case IDC_CATWEASEL: workprefs.catweasel = IsDlgButtonChecked (hDlg, IDC_CATWEASEL) ? -1 : 0; break; - case IDC_MOUSETRICK: - workprefs.win32_outsidemouse = IsDlgButtonChecked (hDlg, IDC_MOUSETRICK) ? -1 : 0; - break; case IDC_NOTASKBARBUTTON: workprefs.win32_notaskbarbutton = IsDlgButtonChecked (hDlg, IDC_NOTASKBARBUTTON); break; @@ -8762,6 +8758,13 @@ static int ghostscript_available; static int joy0previous, joy1previous; static BOOL bNoMidiIn = FALSE; +static void enable_for_gameportsdlg (HWND hDlg) +{ + int v = full_property_sheet; + ew (hDlg, IDC_PORT_TABLET_FULL, v && is_tablet () && workprefs.input_tablet > 0); + ew (hDlg, IDC_PORT_MOUSETRICK, v); +} + static void enable_for_portsdlg (HWND hDlg) { int v; @@ -8802,7 +8805,11 @@ static void updatejoyport (HWND hDlg) int i, j; char tmp[MAX_DPATH], tmp2[MAX_DPATH]; - enable_for_portsdlg (hDlg); + SetDlgItemInt (hDlg, IDC_INPUTSPEEDM, workprefs.input_mouse_speed, FALSE); + CheckDlgButton (hDlg, IDC_PORT_MOUSETRICK, workprefs.input_magic_mouse); + CheckDlgButton (hDlg, IDC_PORT_TABLET, workprefs.input_tablet > 0); + CheckDlgButton (hDlg, IDC_PORT_TABLET_FULL, workprefs.input_tablet == TABLET_REAL); + if (joy0previous < 0) joy0previous = inputdevice_get_device_total (IDTYPE_JOYSTICK) + 1; if (joy1previous < 0) @@ -8876,12 +8883,26 @@ static void fixjport (struct jport *port, int v) port->id = vv; } -static void values_from_portsdlg (HWND hDlg) +static void values_from_gameportsdlg (HWND hDlg, int d) { - int i, lastside = 0, changed = 0, v; - char tmp[256]; - BOOL success; - LRESULT item; + int i, success; + int changed = 0; + int lastside = 0; + + if (d) { + i = GetDlgItemInt (hDlg, IDC_INPUTSPEEDM, &success, FALSE); + if (success) + currprefs.input_mouse_speed = workprefs.input_mouse_speed = i; + + workprefs.input_magic_mouse = IsDlgButtonChecked (hDlg, IDC_PORT_MOUSETRICK) ? -1 : 0; + workprefs.input_tablet = 0; + if (IsDlgButtonChecked (hDlg, IDC_PORT_TABLET)) { + workprefs.input_tablet = TABLET_MOUSEHACK; + if (IsDlgButtonChecked (hDlg, IDC_PORT_TABLET_FULL)) + workprefs.input_tablet = TABLET_REAL; + } + return; + } for (i = 0; i < 2; i++) { int idx = 0; @@ -8911,6 +8932,15 @@ static void values_from_portsdlg (HWND hDlg) else fixjport (&workprefs.jports[1], workprefs.jports[0].id); } + +} + +static void values_from_portsdlg (HWND hDlg) +{ + int v; + char tmp[256]; + BOOL success; + LRESULT item; item = SendDlgItemMessage (hDlg, IDC_PRINTERLIST, CB_GETCURSEL, 0, 0L); if(item != CB_ERR) { @@ -9145,7 +9175,7 @@ static void init_portsdlg (HWND hDlg) } /* Handle messages for the Joystick Settings page of our property-sheet */ -static INT_PTR CALLBACK PortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK GamePortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static int recursive = 0; int temp; @@ -9154,18 +9184,16 @@ static INT_PTR CALLBACK PortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM { case WM_INITDIALOG: recursive++; - pages[PORTS_ID] = hDlg; - currentpage = PORTS_ID; - init_portsdlg (hDlg); + pages[GAMEPORTS_ID] = hDlg; + currentpage = GAMEPORTS_ID; inputdevice_updateconfig (&workprefs); - enable_for_portsdlg (hDlg); - values_to_portsdlg (hDlg); + enable_for_gameportsdlg (hDlg); updatejoyport (hDlg); recursive--; break; case WM_USER: recursive++; - enable_for_portsdlg (hDlg); + enable_for_gameportsdlg (hDlg); updatejoyport (hDlg); recursive--; return TRUE; @@ -9174,7 +9202,7 @@ static INT_PTR CALLBACK PortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM if (recursive > 0) break; recursive++; - if (wParam == IDC_SWAP) { + if (LOWORD (wParam) == IDC_SWAP) { struct jport tmp; memcpy (&tmp, &workprefs.jports[0], sizeof (struct jport)); memcpy (&workprefs.jports[0], &workprefs.jports[1], sizeof (struct jport)); @@ -9182,10 +9210,60 @@ static INT_PTR CALLBACK PortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM temp = joy0previous; joy0previous = joy1previous; joy1previous = temp; + enable_for_gameportsdlg (hDlg); updatejoyport (hDlg); inputdevice_updateconfig (&workprefs); inputdevice_config_change (); - } else if (wParam == IDC_FLUSHPRINTER) { + } else if (HIWORD (wParam) == CBN_SELCHANGE) { + switch (LOWORD (wParam)) + { + case IDC_PORT0_JOYS: + case IDC_PORT1_JOYS: + values_from_gameportsdlg (hDlg, 0); + enable_for_gameportsdlg (hDlg); + updatejoyport (hDlg); + inputdevice_updateconfig (&workprefs); + inputdevice_config_change (); + break; + } + } else { + values_from_gameportsdlg (hDlg, 1); + enable_for_gameportsdlg (hDlg); + } + recursive--; + break; + } + return FALSE; +} + +/* Handle messages for the IO Settings page of our property-sheet */ +static INT_PTR CALLBACK IOPortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static int recursive = 0; + + switch (msg) + { + case WM_INITDIALOG: + recursive++; + pages[IOPORTS_ID] = hDlg; + currentpage = IOPORTS_ID; + init_portsdlg (hDlg); + inputdevice_updateconfig (&workprefs); + enable_for_portsdlg (hDlg); + values_to_portsdlg (hDlg); + recursive--; + break; + case WM_USER: + recursive++; + enable_for_portsdlg (hDlg); + recursive--; + return TRUE; + + case WM_COMMAND: + if (recursive > 0) + break; + recursive++; + if (wParam == IDC_FLUSHPRINTER) { if (isprinter ()) { closeprinter (); } @@ -9201,14 +9279,11 @@ static INT_PTR CALLBACK PortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM if (HIWORD (wParam) == CBN_SELCHANGE) { switch (LOWORD (wParam)) { - case IDC_PORT0_JOYS: - case IDC_PORT1_JOYS: case IDC_PRINTERLIST: case IDC_SERIAL: case IDC_MIDIOUTLIST: case IDC_MIDIINLIST: values_from_portsdlg (hDlg); - updatejoyport (hDlg); inputdevice_updateconfig (&workprefs); inputdevice_config_change (); break; @@ -9231,7 +9306,6 @@ static void values_to_inputdlg (HWND hDlg) SetDlgItemInt (hDlg, IDC_INPUTAUTOFIRERATE, workprefs.input_autofire_framecnt, FALSE); SetDlgItemInt (hDlg, IDC_INPUTSPEEDD, workprefs.input_joymouse_speed, FALSE); SetDlgItemInt (hDlg, IDC_INPUTSPEEDA, workprefs.input_joymouse_multiplier, FALSE); - SetDlgItemInt (hDlg, IDC_INPUTSPEEDM, workprefs.input_mouse_speed, FALSE); CheckDlgButton (hDlg, IDC_INPUTDEVICEDISABLE, (!input_total_devices || inputdevice_get_device_status (input_selected_device)) ? BST_CHECKED : BST_UNCHECKED); } @@ -9401,7 +9475,6 @@ static void enable_for_inputdlg (HWND hDlg) ew (hDlg, IDC_INPUTAUTOFIRERATE, v); ew (hDlg, IDC_INPUTSPEEDA, v); ew (hDlg, IDC_INPUTSPEEDD, v); - ew (hDlg, IDC_INPUTSPEEDM, TRUE); ew (hDlg, IDC_INPUTCOPY, v); ew (hDlg, IDC_INPUTCOPYFROM, v); ew (hDlg, IDC_INPUTSWAP, v); @@ -9447,9 +9520,6 @@ static void values_from_inputdlgbottom (HWND hDlg) v = GetDlgItemInt (hDlg, IDC_INPUTSPEEDA, &success, FALSE); if (success) currprefs.input_joymouse_multiplier = workprefs.input_joymouse_multiplier = v; - v = GetDlgItemInt (hDlg, IDC_INPUTSPEEDM, &success, FALSE); - if (success) - currprefs.input_mouse_speed = workprefs.input_mouse_speed = v; } static void values_from_inputdlg (HWND hDlg, int inputchange) @@ -9611,7 +9681,6 @@ static INT_PTR CALLBACK InputDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM case IDC_INPUTAUTOFIRERATE: case IDC_INPUTSPEEDD: case IDC_INPUTSPEEDA: - case IDC_INPUTSPEEDM: values_from_inputdlgbottom (hDlg); break; } @@ -9681,6 +9750,7 @@ static void enable_for_hw3ddlg (HWND hDlg) { int v = workprefs.gfx_filter ? TRUE : FALSE; int vv = FALSE, vv2 = FALSE, vv3 = FALSE, vv4 = FALSE; + int as = workprefs.gfx_filter_autoscale; struct uae_filter *uf; int i; @@ -9701,24 +9771,24 @@ static void enable_for_hw3ddlg (HWND hDlg) vv3 = TRUE; if (v && uf->x[0]) vv4 = TRUE; - ew (hDlg, IDC_FILTERENABLE, TRUE); +// ew (hDlg, IDC_FILTERENABLE, TRUE); ew (hDlg, IDC_FILTERMODE, v); - CheckDlgButton (hDlg, IDC_FILTERENABLE, v); +// CheckDlgButton (hDlg, IDC_FILTERENABLE, v); ew (hDlg, IDC_FILTERHZ, v); ew (hDlg, IDC_FILTERVZ, v); - ew (hDlg, IDC_FILTERHZMULT, v); - ew (hDlg, IDC_FILTERVZMULT, v); - ew (hDlg, IDC_FILTERHO, v); - ew (hDlg, IDC_FILTERVO, v); - ew (hDlg, IDC_FILTERSLR, vv3); - ew (hDlg, IDC_FILTERXL, vv2); - ew (hDlg, IDC_FILTERXLV, vv2); + ew (hDlg, IDC_FILTERHZMULT, v && !as); + ew (hDlg, IDC_FILTERVZMULT, v && !as); + ew (hDlg, IDC_FILTERHO, v && !as); + ew (hDlg, IDC_FILTERVO, v && !as); + ew (hDlg, IDC_FILTERSLR, vv3 && !as); + ew (hDlg, IDC_FILTERXL, vv2 && !as); + ew (hDlg, IDC_FILTERXLV, vv2 && !as); ew (hDlg, IDC_FILTERXTRA, vv2); ew (hDlg, IDC_FILTERDEFAULT, v); ew (hDlg, IDC_FILTERFILTER, vv); - ew (hDlg, IDC_FILTERKEEPASPECT, vv && !vv2); + ew (hDlg, IDC_FILTERKEEPASPECT, v); ew (hDlg, IDC_FILTERASPECT, v); - ew (hDlg, IDC_FILTERAUTORES, vv && !vv2); + ew (hDlg, IDC_FILTERAUTORES, v); ew (hDlg, IDC_FILTERPRESETSAVE, filterpreset_builtin < 0); ew (hDlg, IDC_FILTERPRESETLOAD, filterpreset_selected > 0); @@ -9764,17 +9834,19 @@ static struct filterxtra filter_3d_extra[] = "Scanline level", &workprefs.gfx_filter_scanlinelevel, &currprefs.gfx_filter_scanlinelevel, 0, 100, 10, NULL }; +static int dummy_in, dummy_out; static int *filtervars[] = { &workprefs.gfx_filter, &workprefs.gfx_filter_filtermode, &workprefs.gfx_filter_vert_zoom, &workprefs.gfx_filter_horiz_zoom, &workprefs.gfx_filter_vert_zoom_mult, &workprefs.gfx_filter_horiz_zoom_mult, &workprefs.gfx_filter_vert_offset, &workprefs.gfx_filter_horiz_offset, &workprefs.gfx_filter_scanlines, &workprefs.gfx_filter_scanlinelevel, &workprefs.gfx_filter_scanlineratio, - &workprefs.gfx_resolution, &workprefs.gfx_linedbl, &workprefs.gfx_correct_aspect, + &workprefs.gfx_resolution, &workprefs.gfx_linedbl, &dummy_in, &workprefs.gfx_xcenter, &workprefs.gfx_ycenter, &workprefs.gfx_filter_luminance, &workprefs.gfx_filter_contrast, &workprefs.gfx_filter_saturation, &workprefs.gfx_filter_gamma, &workprefs.gfx_filter_blur, &workprefs.gfx_filter_noise, &workprefs.gfx_filter_keep_aspect, &workprefs.gfx_filter_aspect, + &workprefs.gfx_filter_autoscale, NULL }; static int *filtervars2[] = { @@ -9783,21 +9855,22 @@ static int *filtervars2[] = { &currprefs.gfx_filter_vert_zoom_mult, &currprefs.gfx_filter_horiz_zoom_mult, &currprefs.gfx_filter_vert_offset, &currprefs.gfx_filter_horiz_offset, &currprefs.gfx_filter_scanlines, &currprefs.gfx_filter_scanlinelevel, &currprefs.gfx_filter_scanlineratio, - &currprefs.gfx_resolution, &currprefs.gfx_linedbl, &currprefs.gfx_correct_aspect, + &currprefs.gfx_resolution, &currprefs.gfx_linedbl, &dummy_out, &currprefs.gfx_xcenter, &currprefs.gfx_ycenter, &currprefs.gfx_filter_luminance, &currprefs.gfx_filter_contrast, &currprefs.gfx_filter_saturation, &currprefs.gfx_filter_gamma, &currprefs.gfx_filter_blur, &currprefs.gfx_filter_noise, &currprefs.gfx_filter_keep_aspect, &currprefs.gfx_filter_aspect, + &workprefs.gfx_filter_autoscale, NULL }; struct filterpreset { char *name; - int conf[24]; + int conf[25]; }; static struct filterpreset filterpresets[] = { - { "PAL example", 8, 0, 0, 0, 1000, 1000, 0, 0, 50, 0, 0, 1, 1, 0, 0, 0, 10, 0, 0, 0, 300, 30, 0, 0 }, + { "PAL example", 8, 0, 0, 0, 1000, 1000, 0, 0, 50, 0, 0, 1, 1, 0, 0, 0, 10, 0, 0, 0, 300, 30, 0, 0, 0 }, { NULL } }; @@ -9815,7 +9888,7 @@ static void values_to_hw3ddlg (HWND hDlg) (workprefs.gfx_filter_aspect == 15 * 256 + 9) ? 2 : (workprefs.gfx_filter_aspect == 16 * 256 + 9) ? 3 : (workprefs.gfx_filter_aspect == 16 * 256 + 10) ? 4 : 0, 0); - CheckDlgButton (hDlg, IDC_FILTERAUTORES, workprefs.gfx_autoresolution); + CheckDlgButton (hDlg, IDC_FILTERAUTORES, workprefs.gfx_filter_autoscale); SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETRANGE, TRUE, MAKELONG (-999, +999)); SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETPAGESIZE, 0, 1); @@ -10123,8 +10196,8 @@ static void filter_handle (HWND hDlg) item = UAE_FILTER_DIRECT3D - 1; sprintf (workprefs.gfx_filtershader, "%s.fx", tmp + 5); } - workprefs.gfx_filter = 0; - if (IsDlgButtonChecked (hDlg, IDC_FILTERENABLE)) { + workprefs.gfx_filter = 1; + if (1) { //IsDlgButtonChecked (hDlg, IDC_FILTERENABLE)) { workprefs.gfx_filter = uaefilters[item].type; item = SendDlgItemMessage (hDlg, IDC_FILTERFILTER, CB_GETCURSEL, 0, 0L); if (item != CB_ERR) @@ -10156,8 +10229,7 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM switch (msg) { case WM_INITDIALOG: - if (strlen (WINUAEBETA) == 0) - ShowWindow (GetDlgItem(hDlg, IDC_FILTERAUTORES), SW_HIDE); + //ShowWindow (GetDlgItem(hDlg, IDC_FILTERAUTORES), SW_HIDE); pages[HW3D_ID] = hDlg; currentpage = HW3D_ID; SendDlgItemMessage (hDlg, IDC_FILTERASPECT, CB_RESETCONTENT, 0, 0); @@ -10199,11 +10271,11 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM filter_preset (hDlg, wParam); recursive++; break; - case IDC_FILTERENABLE: - filter_handle (hDlg); - break; +// case IDC_FILTERENABLE: +// filter_handle (hDlg); +// break; case IDC_FILTERAUTORES: - workprefs.gfx_autoresolution = IsDlgButtonChecked (hDlg, IDC_FILTERAUTORES); + workprefs.gfx_filter_autoscale = IsDlgButtonChecked (hDlg, IDC_FILTERAUTORES); break; case IDC_FILTERKEEPASPECT: currprefs.gfx_filter_keep_aspect = workprefs.gfx_filter_keep_aspect = IsDlgButtonChecked (hDlg, IDC_FILTERKEEPASPECT); @@ -10725,7 +10797,7 @@ static int ignorewindows[] = { -1, IDD_PATHS, IDC_PATHS_ROM, IDC_PATHS_CONFIG, IDC_PATHS_SCREENSHOT, IDC_PATHS_SAVESTATE, IDC_PATHS_AVIOUTPUT, IDC_PATHS_SAVEIMAGE, -1, - IDD_PORTS, IDC_PRINTERLIST, IDC_PS_PARAMS, IDC_SERIAL, IDC_MIDIOUTLIST, IDC_MIDIINLIST, + IDD_IOPORTS, IDC_PRINTERLIST, IDC_PS_PARAMS, IDC_SERIAL, IDC_MIDIOUTLIST, IDC_MIDIINLIST, -1, IDD_SOUND, IDC_SOUNDCARDLIST, IDC_SOUNDDRIVESELECT, -1, @@ -11017,7 +11089,8 @@ static void createTreeView (HWND hDlg, int currentpage) p = CreateFolderNode (TVhDlg, IDS_TREEVIEW_HOST, root, LOADSAVE_ID, CONFIG_TYPE_HOST); CN (DISPLAY_ID); CN (SOUND_ID); - CN (PORTS_ID); + CN (GAMEPORTS_ID); + CN (IOPORTS_ID); CN (INPUT_ID); CN (AVIOUTPUT_ID); CN (HW3D_ID); @@ -11599,7 +11672,8 @@ static int GetSettings (int all_options, HWND hwnd) #ifdef FILESYS HARDDISK_ID = init_page (IDD_HARDDISK, IDI_HARDDISK, IDS_HARDDISK, HarddiskDlgProc, HarddiskAccel, "gui/hard-drives.htm"); #endif - PORTS_ID = init_page (IDD_PORTS, IDI_PORTS, IDS_PORTS, PortsDlgProc, NULL, "gui/ports.htm"); + GAMEPORTS_ID = init_page (IDD_GAMEPORTS, IDI_GAMEPORTS, IDS_GAMEPORTS, GamePortsDlgProc, NULL, "gui/gameports.htm"); + IOPORTS_ID = init_page (IDD_IOPORTS, IDI_IOPORTS, IDS_IOPORTS, IOPortsDlgProc, NULL, "gui/ioports.htm"); INPUT_ID = init_page (IDD_INPUT, IDI_INPUT, IDS_INPUT, InputDlgProc, NULL, "gui/input.htm"); MISC1_ID = init_page (IDD_MISC1, IDI_MISC1, IDS_MISC1, MiscDlgProc1, NULL, "gui/misc.htm"); MISC2_ID = init_page (IDD_MISC2, IDI_MISC2, IDS_MISC2, MiscDlgProc2, NULL, "gui/misc2.htm"); @@ -11773,6 +11847,8 @@ void gui_cd_led (int unitnum, int led) if (resetcounter > 0) return; } + if (led < 0) + led = 0; #ifdef RETROPLATFORM rp_cd_activity (unitnum, led); #endif diff --git a/od-win32/win32gui_extra.c b/od-win32/win32gui_extra.c index 50739eb9..99acdfff 100755 --- a/od-win32/win32gui_extra.c +++ b/od-win32/win32gui_extra.c @@ -20,7 +20,7 @@ #include "sysconfig.h" #include "sysdeps.h" -#include "resource.h" +#include "resource" #include "registry.h" #include "win32.h" #include "win32gui.h" diff --git a/od-win32/wintablet.h b/od-win32/wintablet.h new file mode 100755 index 00000000..d16fb50b --- /dev/null +++ b/od-win32/wintablet.h @@ -0,0 +1,3 @@ +#define PACKETDATA (PK_X | PK_Y | PK_Z | PK_BUTTONS | PK_NORMAL_PRESSURE | PK_ORIENTATION | PK_ROTATION | PK_CURSOR | PK_STATUS) +#define PACKETMODE 0 + diff --git a/od-win32/winuae_msvc/winuae_msvc.vcproj b/od-win32/winuae_msvc/winuae_msvc.vcproj index 3b22d9e0..877ae6d9 100755 --- a/od-win32/winuae_msvc/winuae_msvc.vcproj +++ b/od-win32/winuae_msvc/winuae_msvc.vcproj @@ -86,13 +86,13 @@ + + diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index cf93857d..0945b0cd 100755 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,104 @@ +Beta 5: WARNING: big changes. 1.6 version change expected. + +- KS loader 16-bit odd/even rom image to 32-bit merging fixed +- A1000 bootstrap rom in even/odd format wasn't loaded correctly +- added "Blacker than black" display configuration parameter. + Ticked = borderblank is full black, color register RGB range is + 0F0F0F to FFFFFF (instead of 000000 to FFFFFF) "Fixes" missing + "widescreen effect" in Nexus 7 galaxy effect. (blanked border is + "blacker than black" on real hardware, at least on TV-style + display devices) +- useless correct aspect setting is gone (use null filter instead) +- do not try to decrypt broken non-encrypted DMS files +- added new panel "Gameports", moved joystick configuration from + io ports. (more space for future "easy" input configuration mode) +- moved mouse related settings to new gameports panel +- added tablet settings to new gameports panel +- CD32 mode onscreen CD led now emulates real CD32 CD led behavior :) +- some CD32 CD command and status code updates (did some logic + analyzer stuff, more to do later), now updated cd.device that comes + with FMV cartridge works. Also CD command 2 now returns full + firmware string, "CHINON O-658-2 24" (useless but fun, same with + CDTV CD ROM firmware versions..) +- F12+CTRL was same as F11+CTRL (partial copypaste error) +- renamed motherboard RAM expansion areas +- Wings of Death "fake" NTSC works correctly +- Null filter is default and non-filter mode is not anymore possible. + Finally I can use filters for other things than just simple + filtering . See below! +- filter FS multiplier + keep aspect works as expected +- pal/ntsc vertical size change emulated (using filter scaling, try + KS3.x early boot screen) + +- mouse and tablet/"absolute mouse" support completely rewritten + * mousehack mouse removed (not needed anymore) + * mousehack interrupt and task renamed to "UAE tablet driver" + * do not select any "tablet mouse" in ports-panel. Use normal mouse. + * tablet automatically detected (currently needs to be wintab32.dll + compatible. Really confusing Tablet PC support maybe later..) + Tablet properties in log file. + * tablet and mouse are separate devices, like real Amiga tablets. + * if tablet is detected (and "UAE boot rom" is installed), "UAE + tablet driver" will be automatically enabled: + KS1.x: uses old-style mousehack mode + KS2.x: creates IECLASS_NEWPOINTERPOS/IESUBCLASS_TABLET messages + (position, range and pressure. Note that pressure variable is + documented as "not used" in 2.x documentation..) + KS3.x: creates IECLASS_NEWPOINTERPOS/IESUBCLASS_NEWTABLET messages + ("lots of stuff") + * stylus inverted = right button (if supported by tablet) + * proximity detection (if supported by tablet) + * reported tilt angles are 99.9% surely totally wrong + * Tested only with old USB Wacom Graphire. + * No tablet.library emulation because no information available. + (Deluxe Paint requires it for pressure support) + * TODO: configuration (left button sensitivity, margins etc..) + * New gameports panel settings: + - "Drawing tablet support" = install "tablet driver", mousehack + or real tablet. Same as mouse in "mousehack" mode. (bad label, + will be renamed later..) + - "Full tablet emulation" = use wintab32.dll for all tablet + parameters (x, y, pressure etc..). Real mouse still works in + mousehack mode. + * "Magic Mouse" updated. + - without tablet mode enabled: like previously but more accurate + - mousehack/tablet mode: RTG mode perfectly smooth and seamless + mouse cursor movement inside and outside of emulation window. + (Changes Windows mouse cursor shape, hides real RTG cursor, + works only if RTG hardware mouse cursor enabled) + - native mode cursor sync should be always perfect. (this took + long and was really difficult to do properly..) Does not work + with screen dragging (yet?) + + * NOTE: real table support can't be improved until I get more + information (tilt range etc..) Official documentation is non-existing. + (short comments in includes aren't really considered documentation..) + + And finally extremely long awaited feature that was not supposed to + ever happen: automatic display scaling! + - enable checkbox is "autoscale" in filter panel + - supports all filters (maybe?) + - scaling sliders change extra border size (middle = no borders) + - keep aspect ratio does just that + - ignores possible sprites outside of display area (Banshee, Spheris + Legacy etc..) Will be updated later.. + - enabled by default, aspect ratio disabled, at least during beta + phase. Perhaps there should be button in quickstart panel to disable + or enable autoscaling because not everyone likes blurry display to + become the default.. + - to prevent very small displays scaled to fullscreen (like Guru + meditation boxes), minimum allowed internal display size is 256*192. + Max size is 344*272 (in lores, nonlaced pixels) + - the better this gets the more comments I get.. (which means + screenshot and complete name and/or CRC32) + + Does not (cannot) work with all programs. Why did I finally do this? + Because "magic mouse" sync mode required position of display start + and end and it was more or less the same was required for automatic + scaling.. And also because filter internal algorithms are finally + good enough. + Beta 4: - removable real harddrives (or other memory devices) work again @@ -19,7 +119,6 @@ Beta 4: - added support for 81 and 82 cylinder PC/Atari ST image formats - memwatch breakpoints work after reset/memory bank changes - Beta 3: - HAM errors if left border was not fully visible (it seems this bug