]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1540b5.zip
authorToni Wilen <twilen@winuae.net>
Fri, 26 Dec 2008 14:26:26 +0000 (16:26 +0200)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:44:08 +0000 (21:44 +0200)
51 files changed:
akiko.c
archivers/dms/pfile.c
blitter.c
cfgfile.c
cpummu.c
custom.c
drawing.c
expansion.c
filesys
filesys.c
filesys_bootrom.c
gfxutil.c
hardfile.c
include/cpummu.h
include/drawing.h
include/gfxfilter.h
include/inputdevice.h
include/options.h
include/xwin.h
inprec.c [new file with mode: 0755]
inputdevice.c
main.c
memory.c
newcpu.c
od-win32/avioutput.c
od-win32/bsdsock.c
od-win32/debug_win32.c
od-win32/dinput.c
od-win32/dxwrap.c
od-win32/hardfile_win32.c
od-win32/keyboard_win32.c
od-win32/lcd.c
od-win32/midi.c
od-win32/parser.c
od-win32/picasso96_win.c
od-win32/picasso96_win.h
od-win32/resources/d/resource [moved from od-win32/resources/resource.h with 100% similarity]
od-win32/resources/d/resource.h [new file with mode: 0755]
od-win32/resources/resource
od-win32/resources/winuae.rc
od-win32/serial_win32.c
od-win32/sysconfig.h
od-win32/win32.c
od-win32/win32.h
od-win32/win32_scale2x.c
od-win32/win32gfx.c
od-win32/win32gui.c
od-win32/win32gui_extra.c
od-win32/wintablet.h [new file with mode: 0755]
od-win32/winuae_msvc/winuae_msvc.vcproj
od-win32/winuaechangelog.txt

diff --git a/akiko.c b/akiko.c
index c85a98cff6ec1ba2eb06017bcf73ce50ba319abf..fc6971cd6f813431a93aa462bfcaba5d8406a827 100755 (executable)
--- a/akiko.c
+++ b/akiko.c
 #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;
index d1bf43b3a5dc2f3417b1b5a125665464bd7ba23f..f8e7d1113e832bdef1e2df3dcb7ac6d30b251e4d 100755 (executable)
@@ -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;
        }
index 0cf1d5cd6e5ceec4351a6a572a3b6a5349ba3968..50c2251342387ef4b6243be6d9ae2aed4f273f37 100755 (executable)
--- 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;
index 3e2ba19e199c5ad7b1a5a4c8072cdd07266142d7..5d631a2d94807b06101a87e5ba51375233e3f7c8 100755 (executable)
--- 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);
index ff1319e0eb335611a0b4de63d557d3db953300df..092f886c323f6dc9709fa56527ffeafd9709141f 100755 (executable)
--- a/cpummu.c
+++ b/cpummu.c
  * 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(&regs, 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(&regs, 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, &regs);
 }
index be9cb41ed537a861b901931022dd07c1b97d4271..9cc86f2990dfb8ce82e0331cd24d12170e51dd4d 100755 (executable)
--- 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 (&regs));
+    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;
index af352616cc05ffc02a51bc240b5b57530479d83c..2580ead07038860bd06e7fedaa4b2d5de87c97f1 100755 (executable)
--- 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;
index 9ab5e7834c4f0d6ffad0a9b6df508e2fa55ef55b..6c47104c9580dbc15dc2666b86cdf24e7f1dc372 100755 (executable)
@@ -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 d76f4e7a0642213225c801087e14f56e9b9e2023..847c5e1c9b6d394ddaab6f44ed083548fe7d5cca 100755 (executable)
Binary files a/filesys and b/filesys differ
index d9a0ee25b57e6343414c074c1b50e93cc7f68e54..e2b1c838cf48f8bd13f87190be95febda18d1760 100755 (executable)
--- 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"
 }
index e19ba0e86381eea130927d9ed0c6c96e445eda9f..5ad240e087b1029f37423ab3631c2a9cd724cafd 100755 (executable)
  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);
 
index c8b344ff2ef1e7ba1db96b36cc9b7138f1598168..40303b06c4d2b50ad0d21b136d21035281b6f134 100755 (executable)
--- 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;
        }
index 9a7d12f42b4616e391ab6022e9532ccb1cdf671f..f455f022b5a2b14de379a7cd80cfe7ff70c9bf19 100755 (executable)
@@ -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;
index 25f3e3161f4d7be0c762878b615cf2b3f5e1c4a4..1216f869fbe524625606505acc066fe540e68852 100755 (executable)
 #ifndef CPUMMU_H
 #define CPUMMU_H
 
+#ifndef FULLMMU
+#define FULLMMU
+#endif
+
 #define ALWAYS_INLINE __forceinline
 #define bool int
 #define DUNUSED(x)
index b84c0277357c8a2ae1b1d4d04e0b2082c115f644..0ec95ae7d61849d8edd5d4e5b2e5201a552d8fef 100755 (executable)
@@ -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.  */
 
index 5dd78237bb2ec8f901a2fe1be4bead21146f6f23..749f3b3b74cc6f44a3eb3b514c7c28f829bd559c 100755 (executable)
@@ -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
index 65d3de867d702a74afb8d6c957001238ccb8f512..0be34ec9de9237da470acdc8229ec8c4d695dcd5 100755 (executable)
@@ -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
index cee0059aa9584b00d4e5300d161a40d7d0691971..221fe46f498766ffc12f75d7d9b051d5f429b7d8 100755 (executable)
@@ -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];
index 4cf99e16dbba140ea9b8231a0aa70e6ad09088d5..c494b079a1ea7461b5825d50eb8251c50ec4a008 100755 (executable)
@@ -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 (executable)
index 0000000..5c40a87
--- /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;
+}
index f2538af459cbe1a40d69607dee58ef8f6baf49d8..7ae6764d7070b49e61fd8fde578fc06f9c1dd44e 100755 (executable)
 #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 6496946d36beb69cc27cc83814e44e1454b0e76b..eb1888caf7edb0d61b4d092e5532761053b6739e 100755 (executable)
--- 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)
index 94c38010bf747a29fb4c583626d303bed00837ac..f5277b5183d37bf2c9d19148ecbfdadabba59bad 100755 (executable)
--- 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:
index 59153032625f35d92ffadae4ba0a04c004a18d8e..27e01343bdd68c1904b5b12f867741f84687f440 100755 (executable)
--- 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;
index 43060e7b9f4420b618af4e7ee7b23c5737378c7b..96b7317a98fde763d1155bc3b85ed62cbd694a05 100755 (executable)
@@ -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"
index a93d4449155d696dbfbfc9a91e79d018358a395f..0b1681a1577a830b7d1c80733d9ecc29622d4b51 100755 (executable)
@@ -14,6 +14,8 @@
 
 #if defined(BSDSOCKET)
 
+#include "resource"
+
 #include <winsock.h>
 #include <stddef.h>
 #include <process.h>
@@ -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"
index ccfeaf3cd74d435982efa831342ecc7a9622b132..e56e5ffa14dea079dd7200fe1c800ea44fccb103 100755 (executable)
@@ -14,7 +14,9 @@
 #include <windows.h>
 #include <windowsx.h>
 #include <commctrl.h>
-#include "resource.h"
+
+#include "resource"
+
 #include "options.h"
 #include "memory.h"
 #include "custom.h"
index 6e90b6e54284a56a0c8bf3d1085e4dcff509814a..f7fbe0e96ec61ce35e4de4a487f049a3f5319d0c 100755 (executable)
@@ -42,6 +42,9 @@
 #include <setupapi.h>
 #include <devguid.h>
 
+#include <wintab.h>
+#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);
index 47ab0dd362a4c3f5f46ed5f3b49363c2f10b4d12..8b6efe4e81e11626eabd2ee99110b8266bb65fb9 100755 (executable)
@@ -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;
     }
 }
 
index aa5180145aabf7d900836d8325e13924437fdcbc..bb0ba5298f62ad99281731c37c211bb4e6c6e0b8 100755 (executable)
@@ -5,7 +5,8 @@
 #include "sysdeps.h"
 
 #include <shellapi.h>
-#include "resource.h"
+
+#include "resource"
 
 #include "threaddep/thread.h"
 #include "options.h"
index 881a0f09aab8d572d290922050e3d9342685611a..8721649f02629ca309b2aa727aa286b31e54d4d0 100755 (executable)
@@ -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 ())
index 0514c1992c14e7c6d58d2483cef533fd3f9b885f..0a445cb7df1f983fba9b3e134dbb64d5ebb488c2 100755 (executable)
@@ -4,7 +4,7 @@
 
 #if defined(LOGITECHLCD)
 
-#include "resource.h"
+#include "resource"
 #include "gui.h"
 #include "lcd.h"
 
index ce3e23389c3744ba2c24ed8f4796d750286dd6af..7831a429c2680d4b30920cbfb50b7bc759b108e7 100755 (executable)
 #include <io.h>
 
 #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
index ba405e451a8e1e1a0970599780c9f812a61a704d..62575af7e624cce542f95ec5972af3b79d5cdeb5 100755 (executable)
@@ -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;
                }
index afa4b4a8cc4456f7c06c77e4cd6180fc36c8fbce..2e9783bd8351dce45d00857b2fbbf9612456add5 100755 (executable)
@@ -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
index e5db286fdd4bfd9a0910fa3fd895eca02ca6f84f..d9957dfd6bb5980a232ec01f4e1c1fa1b6ad2b66 100755 (executable)
@@ -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/d/resource.h b/od-win32/resources/d/resource.h
new file mode 100755 (executable)
index 0000000..357c325
--- /dev/null
@@ -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
index 2c8345561ed085e555332e2f34d15a48cf57c602..8435e167b924abcf43a4f03208fa52d8dea4a17c 100755 (executable)
@@ -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
 #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 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
 #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
 #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
 #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
index 1f551e8646d360a8ea063573846a74f6a342982f..cda98441ea909c50342ce2fa22fac0968bc8fe17 100755 (executable)
@@ -90,7 +90,7 @@ BEGIN
     EDITTEXT        IDC_XSIZE,59,48,48,12,ES_NUMBER\r
     EDITTEXT        IDC_YSIZE,114,48,47,12,ES_NUMBER\r
     GROUPBOX        "Settings",IDC_SETTINGSTEXT,12,73,199,125\r
-    CONTROL         "Correct aspect ratio",IDC_ASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,126,92,10\r
+    CONTROL         "Blacker than black",IDC_BLACKER_THAN_BLACK,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,19,126,92,10\r
     LTEXT           "Refresh:",IDC_REFRESHTEXT,18,162,28,8\r
     CONTROL         "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,47,157,75,20\r
     EDITTEXT        IDC_RATETEXT,124,161,77,12,ES_CENTER | ES_READONLY\r
@@ -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\r
     CONTROL         "Slider1",IDC_P96MEM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,88,94,60,20\r
     EDITTEXT        IDC_P96RAM,152,97,34,12,ES_CENTER | ES_READONLY\r
-    GROUPBOX        "Advanced Memory Settings",-1,13,179,275,57\r
-    RTEXT           "Motherboard RAM (Low area):",-1,39,194,129,10,SS_CENTERIMAGE\r
+    GROUPBOX        "A3000/A4000 Advanced Memory Settings",-1,13,179,275,57\r
+    RTEXT           "Motherboard Fast RAM:",-1,39,194,129,10,SS_CENTERIMAGE\r
     CONTROL         "",IDC_MBMEM1,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,180,190,59,20\r
     EDITTEXT        IDC_MBRAM1,243,193,34,12,ES_CENTER | ES_READONLY\r
-    RTEXT           "Motherboard RAM (High area):",-1,39,217,129,10,SS_CENTERIMAGE\r
+    RTEXT           "Prosessor Slot Fast RAM:",-1,39,217,129,10,SS_CENTERIMAGE\r
     CONTROL         "",IDC_MBMEM2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,180,213,59,20\r
     EDITTEXT        IDC_MBRAM2,243,216,34,12,ES_CENTER | ES_READONLY\r
     GROUPBOX        "RTG Graphics Card Settings",-1,14,81,275,95\r
@@ -339,39 +339,52 @@ BEGIN
     PUSHBUTTON      "Save As...",IDC_SAVE,175,225,44,15\r
 END\r
 \r
-IDD_PORTS DIALOGEX 0, 0, 300, 238\r
+IDD_IOPORTS DIALOGEX 0, 0, 300, 208\r
 STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
 FONT 8, "MS Sans Serif", 0, 0, 0x1\r
 BEGIN\r
-    GROUPBOX        "Parallel Port",IDC_SERPARFRAME,5,2,291,68\r
+    GROUPBOX        "Parallel Port",IDC_SERPARFRAME,5,2,291,86\r
     RTEXT           "Printer:",IDC_STATIC,12,15,25,15,SS_CENTERIMAGE\r
-    COMBOBOX        IDC_PRINTERLIST,49,15,153,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
-    PUSHBUTTON      "Flush print job",IDC_FLUSHPRINTER,220,15,58,12\r
-    CONTROL         "PostScript detection",IDC_PSPRINTERDETECT,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,11,33,79,12\r
-    CONTROL         "PostScript printer emulation",IDC_PSPRINTER,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,95,33,110,12\r
-    RTEXT           "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,202,32,57,15,SS_NOTIFY | SS_CENTERIMAGE\r
-    EDITTEXT        IDC_PRINTERAUTOFLUSH,263,33,25,12,ES_NUMBER\r
-    RTEXT           "Ghostscript extra parameters:",IDC_STATIC,12,49,102,15,SS_CENTERIMAGE\r
-    EDITTEXT        IDC_PS_PARAMS,124,50,165,12,ES_AUTOHSCROLL\r
-    GROUPBOX        "Serial Port",IDC_SERIALFRAME,4,72,292,48\r
-    COMBOBOX        IDC_SERIAL,49,84,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
-    CONTROL         "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,103,48,12\r
-    CONTROL         "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,103,55,12\r
-    GROUPBOX        "MIDI",IDC_MIDIFRAME,4,123,292,33\r
-    RTEXT           "Out:",IDC_MIDI,10,134,34,15,SS_CENTERIMAGE\r
-    COMBOBOX        IDC_MIDIOUTLIST,50,134,95,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
-    RTEXT           "In:",IDC_MIDI2,150,134,29,15,SS_CENTERIMAGE\r
-    COMBOBOX        IDC_MIDIINLIST,185,134,95,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
-    GROUPBOX        "Mouse/Joystick Ports",IDC_PORT0,4,158,292,75\r
-    COMBOBOX        IDC_PORT0_JOYS,45,174,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
-    COMBOBOX        IDC_PORT1_JOYS,45,195,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
-    PUSHBUTTON      "Swap ports",IDC_SWAP,211,214,75,14\r
-    RTEXT           "Port 0:",IDC_STATIC,11,173,25,15,SS_CENTERIMAGE\r
-    RTEXT           "Port 1:",IDC_STATIC,11,194,25,15,SS_CENTERIMAGE\r
-    LTEXT           "X-Arcade layout information []#1",IDC_STATIC,16,213,106,15,SS_NOTIFY | SS_CENTERIMAGE\r
+    COMBOBOX        IDC_PRINTERLIST,49,15,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Flush print job",IDC_FLUSHPRINTER,114,51,58,12\r
+    CONTROL         "PostScript detection",IDC_PSPRINTERDETECT,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,65,35,79,12\r
+    CONTROL         "PostScript printer emulation",IDC_PSPRINTER,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,175,35,110,12\r
+    RTEXT           "Autoflush [] Time in seconds after a pending print job is automatically flushed.",IDC_PRINTERAUTOFLUSHTXT,173,49,86,15,SS_NOTIFY | SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PRINTERAUTOFLUSH,263,50,25,12,ES_NUMBER\r
+    RTEXT           "Ghostscript extra parameters:",IDC_STATIC,12,66,102,15,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_PS_PARAMS,124,67,165,12,ES_AUTOHSCROLL\r
+    GROUPBOX        "Serial Port",IDC_SERIALFRAME,4,92,292,48\r
+    COMBOBOX        IDC_SERIAL,49,104,232,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    CONTROL         "Shared",IDC_SER_SHARED,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,15,123,48,12\r
+    CONTROL         "RTS/CTS",IDC_SER_CTSRTS,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,75,123,55,12\r
+    GROUPBOX        "MIDI",IDC_MIDIFRAME,4,143,292,50\r
+    RTEXT           "Out:",IDC_MIDI,10,154,34,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_MIDIOUTLIST,49,154,232,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    RTEXT           "In:",IDC_MIDI2,10,174,29,15,SS_CENTERIMAGE\r
+    COMBOBOX        IDC_MIDIINLIST,49,174,232,134,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
     CONTROL         "Direct []Use when emulating serial-link games on two PCs running WinUAE",IDC_SER_DIRECT,\r
-                    "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,135,103,65,12\r
-    CONTROL         "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,103,78,12\r
+                    "Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,135,123,65,12\r
+    CONTROL         "uaeserial.device",IDC_UAESERIAL,"Button",BS_AUTOCHECKBOX | BS_VCENTER | WS_TABSTOP,200,123,78,12\r
+END\r
+\r
+IDD_GAMEPORTS DIALOGEX 0, 0, 300, 178\r
+STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD\r
+FONT 8, "MS Sans Serif", 0, 0, 0x1\r
+BEGIN\r
+    COMBOBOX        IDC_PORT0_JOYS,45,29,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_PORT1_JOYS,45,50,241,130,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
+    PUSHBUTTON      "Swap ports",IDC_SWAP,211,69,75,14\r
+    RTEXT           "Port 0:",IDC_STATIC,11,28,25,15,SS_CENTERIMAGE\r
+    RTEXT           "Port 1:",IDC_STATIC,11,49,25,15,SS_CENTERIMAGE\r
+    LTEXT           "X-Arcade layout information []#1",IDC_STATIC,16,68,106,15,SS_NOTIFY | SS_CENTERIMAGE\r
+    GROUPBOX        "Mouse and Joystick settings",IDC_STATIC,4,15,292,76\r
+    GROUPBOX        "Mouse extra settings",IDC_STATIC,4,92,292,79\r
+    RTEXT           "Mouse speed:",IDC_STATIC,17,106,56,10,SS_CENTERIMAGE\r
+    EDITTEXT        IDC_INPUTSPEEDM,87,106,25,12,ES_NUMBER\r
+    CONTROL         "Drawing tablet support",IDC_PORT_TABLET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,113,110,10\r
+    CONTROL         "Full tablet input emulation",IDC_PORT_TABLET_FULL,\r
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,127,110,10\r
+    CONTROL         "Magic Mouse",IDC_PORT_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,21,122,119,10\r
 END\r
 \r
 IDD_CONTRIBUTORS DIALOGEX 0, 0, 411, 242\r
@@ -438,8 +451,7 @@ BEGIN
     COMBOBOX        IDC_LANGUAGE,103,121,179,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
     GROUPBOX        "Language",IDC_STATIC,7,113,285,25\r
     CONTROL         "Disable powersaving features",IDC_POWERSAVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,92,120,10\r
-    CONTROL         "Magic Mouse",IDC_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,66,119,10\r
-    CONTROL         "uaenet.device",IDC_SANA2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,79,94,10\r
+    CONTROL         "uaenet.device",IDC_SANA2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,66,94,10\r
     COMBOBOX        IDC_DD_SURFACETYPE,217,93,68,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
     RTEXT           "Display buffer:",IDC_STATIC,159,94,52,10,SS_CENTERIMAGE\r
 END\r
@@ -662,8 +674,6 @@ BEGIN
     EDITTEXT        IDC_INPUTSPEEDD,215,195,25,12,ES_NUMBER\r
     RTEXT           "Analog joy-mouse speed:",-1,120,212,88,10,SS_CENTERIMAGE\r
     EDITTEXT        IDC_INPUTSPEEDA,215,211,25,12,ES_NUMBER\r
-    RTEXT           "Mouse speed:",-1,132,228,76,10,SS_CENTERIMAGE\r
-    EDITTEXT        IDC_INPUTSPEEDM,215,227,25,12,ES_NUMBER\r
     PUSHBUTTON      "Copy from:",IDC_INPUTCOPY,249,195,45,14\r
     COMBOBOX        IDC_INPUTCOPYFROM,249,211,45,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
     PUSHBUTTON      "Swap 1<>2",IDC_INPUTSWAP,249,226,45,14\r
@@ -674,9 +684,8 @@ STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD
 FONT 8, "MS Sans Serif", 0, 0, 0x1\r
 BEGIN\r
     GROUPBOX        "Filter Settings",-1,0,0,294,186\r
-    CONTROL         "Enable",IDC_FILTERENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,16,40,11\r
-    COMBOBOX        IDC_FILTERMODE,53,15,83,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
-    COMBOBOX        IDC_FILTERFILTER,142,15,74,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERMODE,20,15,103,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERFILTER,132,15,83,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
     PUSHBUTTON      "Reset to defaults",IDC_FILTERDEFAULT,221,15,67,14\r
     RTEXT           "Horiz. size:",-1,7,44,54,10,SS_CENTERIMAGE\r
     CONTROL         "Slider1",IDC_FILTERHZ,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,99,37,152,19\r
@@ -703,7 +712,7 @@ BEGIN
     COMBOBOX        IDC_FILTERVZMULT,67,63,27,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
     CONTROL         "Autoscale",IDC_FILTERAUTORES,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,168,83,10\r
     COMBOBOX        IDC_FILTERXTRA,105,134,138,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
-    COMBOBOX        IDC_FILTERASPECT,21,118,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
+    COMBOBOX        IDC_FILTERASPECT,20,118,73,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP\r
     CONTROL         "Keep aspect ratio",IDC_FILTERKEEPASPECT,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,9,153,85,10\r
 END\r
 \r
@@ -925,7 +934,8 @@ IDI_FLOPPY              ICON                    "35floppy.ico"
 IDI_ABOUT               ICON                    "amigainfo.ico"\r
 IDI_HARDDISK            ICON                    "Drive.ico"\r
 IDI_CPU                 ICON                    "cpu.ico"\r
-IDI_PORTS               ICON                    "joystick.ico"\r
+IDI_GAMEPORTS           ICON                    "joystick.ico"\r
+IDI_IOPORTS             ICON                    "joystick.ico"\r
 IDI_INPUT               ICON                    "joystick.ico"\r
 IDI_MISC1               ICON                    "misc.ico"\r
 IDI_MISC2               ICON                    "misc.ico"\r
@@ -1081,6 +1091,22 @@ IDR_DRIVE_SPINND_A500_1 WAVE                    "drive_spinnd.wav"
 IDB_XARCADE             BITMAP                  "xarcade-winuae.bmp"\r
 IDB_LCD160X43           BITMAP                  "lcd.bmp"\r
 \r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
+// DESIGNINFO\r
+//\r
+\r
+#ifdef APSTUDIO_INVOKED\r
+GUIDELINES DESIGNINFO \r
+BEGIN\r
+    IDD_IOPORTS, DIALOG\r
+    BEGIN\r
+        BOTTOMMARGIN, 180\r
+    END\r
+END\r
+#endif    // APSTUDIO_INVOKED\r
+\r
+\r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
 // String Table\r
@@ -1096,7 +1122,7 @@ BEGIN
     IDS_ABOUT               "About"\r
     IDS_LOADSAVE            "Configurations"\r
     IDS_AVIOUTPUT           "Output"\r
-    IDS_PORTS               "Game & IO ports"\r
+    IDS_IOPORTS             "IO ports"\r
     IDS_MISC1               "Miscellaneous"\r
     IDS_MEMORY              "RAM"\r
     IDS_CPU                 "CPU and FPU"\r
@@ -1112,6 +1138,7 @@ BEGIN
     IDS_QUICKSTART          "Quickstart"\r
     IDS_FRONTEND            "Frontend"\r
     IDS_CHIPSET2            "Adv. Chipset"\r
+    IDS_GAMEPORTS           "Game ports"\r
 END\r
 \r
 STRINGTABLE \r
index be908d1d63a3721747e4e6bb2c1e06bd388b2c2e..b8eb15bb698a5229da692eed6cf6391cf12fc012 100755 (executable)
@@ -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
 }
index 6b076c060449b20e6a6d907e9c155e6d92b7d10d..dccea6db707620a864db47680e6a56763e4db2fa 100755 (executable)
@@ -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 */
index c4b81544d5c8ed3202fdf3e9a3ae491a376388fa..e9f6f8b793ad20b621e22ae44864cd30663534b5 100755 (executable)
 #include <shlwapi.h>
 #include <dbghelp.h>
 
+#include "resource"
+
+#include <wintab.h>
+#include "wintablet.h"
+#include <pktdef.h>
+
 #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;
     }
index a403ae0f048cf6677bd03c39c54f2c1cf46e3ddb..ba380c95b8d8f5f226065a45c8e45c995ee0530c 100755 (executable)
@@ -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);
index 8be578621992358e83b7770146695289988eef9a..4e4dc5ea7466dc4bd12882f2dde95ffc2367e1af 100755 (executable)
@@ -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 ();
 }
index 3bd5a963769cb75baa524761c5e9b2a08c52c5c7..3818da2e9c72e70f1c1116adcf51bb842b286b5e 100755 (executable)
@@ -18,6 +18,9 @@
 #include <shellapi.h>
 
 #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;
index e386f012b1084ba6d35bd0064f7435d7bd7b66e1..6f27dbbce3f1f943a1dce803642bd06648e9f3a6 100755 (executable)
@@ -31,7 +31,7 @@
 #include <shobjidl.h>
 #include <dbt.h>
 
-#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
index 50739eb95d4d7b2801416bd29d08ff9d88697249..99acdfff93c6f7df06d6328dc934f75e131e5c12 100755 (executable)
@@ -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 (executable)
index 0000000..d16fb50
--- /dev/null
@@ -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
+
index 3b22d9e039009cca1d6c7f86fa080107e28df5b2..877ae6d9a75d337ccb973f84c2c22853fa86521b 100755 (executable)
                        <Tool
                                Name="VCLinkerTool"
                                AdditionalOptions="/MACHINE:I386"
-                               AdditionalDependencies="opengl32.lib glu32.lib ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib vfw32.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib capsimg.lib dxerr9.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib"
+                               AdditionalDependencies="opengl32.lib glu32.lib ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib vfw32.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib capsimg.lib dxerr9.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib wintab32.lib"
                                ShowProgress="0"
                                OutputFile="d:\amiga\winuae.exe"
                                LinkIncremental="2"
                                SuppressStartupBanner="true"
                                GenerateManifest="false"
-                               DelayLoadDLLs="wpcap.dll;packet.dll;d3dx9_40.dll;openal32.dll"
+                               DelayLoadDLLs="wpcap.dll;packet.dll;d3dx9_40.dll;openal32.dll;wintab32.dll"
                                GenerateDebugInformation="true"
                                ProgramDatabaseFile=".\Debug/winuae.pdb"
                                SubSystem="2"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalDependencies="opengl32.lib glu32.lib ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib vfw32.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr9.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib"
+                               AdditionalDependencies="opengl32.lib glu32.lib ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib vfw32.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr9.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib wintab32.lib"
                                OutputFile="d:\amiga\winuae.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
                                AdditionalLibraryDirectories=""
                                GenerateManifest="true"
                                AdditionalManifestDependencies=""
-                               DelayLoadDLLs="wpcap.dll;packet.dll;d3dx9_40.dll;openal32.dll"
+                               DelayLoadDLLs="wpcap.dll;packet.dll;d3dx9_40.dll;openal32.dll;wintab32.dll"
                                GenerateDebugInformation="true"
                                ProgramDatabaseFile=".\Release/winuae.pdb"
                                SubSystem="2"
                        />
                        <Tool
                                Name="VCLinkerTool"
-                               AdditionalDependencies="opengl32.lib glu32.lib ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib vfw32.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr9.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib"
+                               AdditionalDependencies="opengl32.lib glu32.lib ws2_32.lib ddraw.lib dxguid.lib winmm.lib comctl32.lib version.lib vfw32.lib msacm32.lib dsound.lib dinput8.lib d3d9.lib d3dx9.lib winio.lib setupapi.lib wininet.lib dxerr9.lib shlwapi.lib zlibstat.lib libpng.lib lglcd.lib wpcap.lib packet.lib openal32.lib wintab32.lib"
                                OutputFile="d:\amiga\winuae.exe"
                                LinkIncremental="1"
                                SuppressStartupBanner="true"
                                AdditionalLibraryDirectories=""
                                GenerateManifest="true"
                                AdditionalManifestDependencies=""
-                               DelayLoadDLLs="wpcap.dll;packet.dll;d3dx9_40.dll;openal32.dll"
+                               DelayLoadDLLs="wpcap.dll;packet.dll;d3dx9_40.dll;openal32.dll;wintab32.dll"
                                GenerateDebugInformation="true"
                                ProgramDatabaseFile=".\FullRelease/winuae.pdb"
                                SubSystem="2"
                        RelativePath="..\hq4x32.obj"
                        >
                </File>
+               <File
+                       RelativePath="..\resources\resource"
+                       >
+               </File>
        </Files>
        <Globals>
        </Globals>
index cf93857d1e845e61d2f2808c6dcd1492c8cf7d17..0945b0cd7165601cf35e3aaab2a4650a180dbc28 100755 (executable)
@@ -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