]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
3300b10
authorToni Wilen <twilen@winuae.net>
Sat, 9 Apr 2016 17:04:05 +0000 (20:04 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 9 Apr 2016 17:04:05 +0000 (20:04 +0300)
22 files changed:
autoconf.cpp
cfgfile.cpp
drawing.cpp
expansion.cpp
filesys.asm
filesys.cpp
filesys_bootrom.cpp
ide.cpp
include/autoconf.h
include/keyboard.h
include/uae/ppc.h
main.cpp
od-win32/picasso96_win.cpp
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32.h
od-win32/win32_scaler.cpp
od-win32/win32gfx.cpp
od-win32/win32gui.cpp
od-win32/winuaechangelog.txt
ppc/ppc.cpp
traps.cpp

index 2f89e29276f7d65c03d152f94630cb2329533d0a..c5a507b43b32da448108343ac4687ac394585018 100644 (file)
@@ -24,6 +24,7 @@
 #include "threaddep/thread.h"
 #include "native2amiga.h"
 #include "inputdevice.h"
+#include "uae/ppc.h"
 
 /* Commonly used autoconfig strings */
 
@@ -38,6 +39,7 @@ uae_sem_t hardware_trap_event[RTAREA_TRAP_DATA_SIZE / RTAREA_TRAP_DATA_SLOT_SIZE
 uae_sem_t hardware_trap_event2[RTAREA_TRAP_DATA_SIZE / RTAREA_TRAP_DATA_SLOT_SIZE];
 
 static uaecptr rt_trampoline_ptr, trap_entry;
+static bool rtarea_write_enabled;
 extern volatile uae_atomic hwtrap_waiting;
 extern volatile int trap_mode;
 
@@ -181,6 +183,8 @@ static uae_u32 REGPARAM2 rtarea_bget (uaecptr addr)
 
 static bool rtarea_write(uaecptr addr)
 {
+       if (rtarea_write_enabled)
+               return true;
        if (addr >= RTAREA_WRITEOFFSET)
                return true;
        if (addr >= RTAREA_SYSBASE && addr < RTAREA_SYSBASE + 4)
@@ -268,6 +272,7 @@ static void REGPARAM2 rtarea_wput (uaecptr addr, uae_u32 value)
                }
        }
 }
+
 static void REGPARAM2 rtarea_lput (uaecptr addr, uae_u32 value)
 {
        addr &= 0xffff;
@@ -374,17 +379,96 @@ uae_u32 ds_bstr_ansi (const uae_char *str)
        return addr (rt_straddr) >> 2;
 }
 
+#define MAX_ABSOLUTE_ROM_ADDRESS 1024
+
+static int absolute_rom_address;
+static uaecptr absolute_rom_addresses[MAX_ABSOLUTE_ROM_ADDRESS];
+static uaecptr rombase_new;
+
+void save_rom_absolute(uaecptr addr)
+{
+       if (rombase_new)
+               return;
+       if (absolute_rom_address >= MAX_ABSOLUTE_ROM_ADDRESS) {
+               write_log(_T("MAX_ABSOLUTE_ROM_ADDRESS is too low!"));
+               abort();
+       }
+       for (int i = 0; i < absolute_rom_address; i++) {
+               if (absolute_rom_addresses[i] == addr) {
+                       write_log(_T("Address %08x already added\n"), addr);
+                       return;
+               }
+       }
+       absolute_rom_addresses[absolute_rom_address++] = addr;
+}
+
+void add_rom_absolute(uaecptr addr)
+{
+       uaecptr h = here();
+       dl(addr);
+       save_rom_absolute(h);
+}
+
+uae_u32 boot_rom_copy(TrapContext *ctx, uaecptr rombase, int mode)
+{
+       uaecptr reloc = 0;
+       if (currprefs.uaeboard < 3)
+               return 0;
+       if (!mode) {
+               rtarea_write_enabled = true;
+               protect_roms(false);
+               rombase_new = rombase;
+               int size = 4 + 2 + 4;
+               for (int i = 0; i < absolute_rom_address; i++) {
+                       uae_u32 a = absolute_rom_addresses[i];
+                       if (a >= rtarea_base && a < rtarea_base + 0x10000) {
+                               size += 2;
+                       } else {
+                               size += 4;
+                       }
+               }
+               reloc = uaeboard_alloc_ram(size);
+               uae_u8 *p = uaeboard_map_ram(reloc);
+               put_long_host(p, rtarea_base);
+               p += 4;
+               for (int i = 0; i < absolute_rom_address; i++) {
+                       uae_u32 a = absolute_rom_addresses[i];
+                       if (a >= rtarea_base && a < rtarea_base + 0x10000) {
+                               put_word_host(p, a & 0xffff);
+                               p += 2;
+                       }
+               }
+               put_word_host(p, 0);
+               p += 2;
+               for (int i = 0; i < absolute_rom_address; i++) {
+                       uae_u32 a = absolute_rom_addresses[i];
+                       if (a < rtarea_base || a >= rtarea_base + 0x10000) {
+                               put_long_host(p, a);
+                               p += 4;
+                       }
+               }
+               put_long_host(p, 0);
+               write_log(_T("ROMBASE %08x RAMBASE %08x RELOC %08x (%d)\n"), rtarea_base, rombase, reloc, absolute_rom_address);
+       } else {
+               rtarea_write_enabled = false;
+               protect_roms(true);
+               write_log(_T("ROMBASE changed.\n"), absolute_rom_address);
+               reloc = 1;
+       }
+       return reloc;
+}
+
 void calltrap (uae_u32 n)
 {
        if (currprefs.uaeboard > 2) {
                dw(0x4eb9); // JSR rt_trampoline_ptr
-               dl(rt_trampoline_ptr);
+               add_rom_absolute(rt_trampoline_ptr);
                uaecptr a = here();
                org(rt_trampoline_ptr);
                dw(0x3f3c); // MOVE.W #n,-(SP)
                dw(n);
                dw(0x4ef9); // JMP rt_trampoline_entry
-               dl(trap_entry);
+               add_rom_absolute(trap_entry);
                org(a);
                rt_trampoline_ptr += 3 * 2 + 1 * 4;
        } else {
@@ -462,6 +546,8 @@ void rtarea_init(void)
 
        rt_trampoline_ptr = rtarea_base + RTAREA_TRAMPOLINE;
        trap_entry = 0;
+       absolute_rom_address = 0;
+       rombase_new = 0;
 
        init_traps ();
 
index b26d7ce0336a4e795001dc630317b10726291b32..9a22e2d218932beea64a904bc519e62af982357d 100644 (file)
@@ -196,7 +196,7 @@ static const TCHAR *joyportmodes[] = { _T(""), _T("mouse"), _T("mousenowheel"),
 static const TCHAR *joyaf[] = { _T("none"), _T("normal"), _T("toggle"), _T("always"), 0 };
 static const TCHAR *epsonprinter[] = { _T("none"), _T("ascii"), _T("epson_matrix_9pin"), _T("epson_matrix_24pin"), _T("epson_matrix_48pin"), 0 };
 static const TCHAR *aspects[] = { _T("none"), _T("vga"), _T("tv"), 0 };
-static const TCHAR *vsyncmodes[] = { _T("false"), _T("true"), _T("autoswitch"), 0 };
+static const TCHAR *vsyncmodes[] = { _T("adaptive"), _T("false"), _T("true"), _T("autoswitch"), 0 };
 static const TCHAR *vsyncmodes2[] = { _T("normal"), _T("busywait"), 0 };
 static const TCHAR *filterapi[] = { _T("directdraw"), _T("direct3d"), 0 };
 static const TCHAR *dongles[] =
@@ -1571,9 +1571,9 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
        cfgfile_write (f, _T("gfx_backbuffers_rtg"), _T("%d"), p->gfx_apmode[1].gfx_backbuffers);
        if (p->gfx_apmode[APMODE_NATIVE].gfx_interlaced)
                cfgfile_write_bool (f, _T("gfx_interlace"), p->gfx_apmode[APMODE_NATIVE].gfx_interlaced);
-       cfgfile_write_str (f, _T("gfx_vsync"), vsyncmodes[p->gfx_apmode[0].gfx_vsync]);
+       cfgfile_write_str (f, _T("gfx_vsync"), vsyncmodes[p->gfx_apmode[0].gfx_vsync + 1]);
        cfgfile_write_str (f, _T("gfx_vsyncmode"), vsyncmodes2[p->gfx_apmode[0].gfx_vsyncmode]);
-       cfgfile_write_str (f, _T("gfx_vsync_picasso"), vsyncmodes[p->gfx_apmode[1].gfx_vsync]);
+       cfgfile_write_str (f, _T("gfx_vsync_picasso"), vsyncmodes[p->gfx_apmode[1].gfx_vsync + 1]);
        cfgfile_write_str (f, _T("gfx_vsyncmode_picasso"), vsyncmodes2[p->gfx_apmode[1].gfx_vsyncmode]);
        cfgfile_write_bool (f, _T("gfx_lores"), p->gfx_resolution == 0);
        cfgfile_write_str (f, _T("gfx_resolution"), lorestype1[p->gfx_resolution]);
@@ -2813,13 +2813,17 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value)
                return 1;
        }
        if (_tcscmp (option, _T("gfx_vsync")) == 0) {
-               if (cfgfile_strval (option, value, _T("gfx_vsync"), &p->gfx_apmode[APMODE_NATIVE].gfx_vsync, vsyncmodes, 0) >= 0)
+               if (cfgfile_strval (option, value, _T("gfx_vsync"), &p->gfx_apmode[APMODE_NATIVE].gfx_vsync, vsyncmodes, 0) >= 0) {
+                       p->gfx_apmode[APMODE_NATIVE].gfx_vsync--;
                        return 1;
+               }
                return cfgfile_yesno (option, value, _T("gfx_vsync"), &p->gfx_apmode[APMODE_NATIVE].gfx_vsync);
        }
        if (_tcscmp (option, _T("gfx_vsync_picasso")) == 0) {
-               if (cfgfile_strval (option, value, _T("gfx_vsync_picasso"), &p->gfx_apmode[APMODE_RTG].gfx_vsync, vsyncmodes, 0) >= 0)
+               if (cfgfile_strval (option, value, _T("gfx_vsync_picasso"), &p->gfx_apmode[APMODE_RTG].gfx_vsync, vsyncmodes, 0) >= 0) {
+                       p->gfx_apmode[APMODE_RTG].gfx_vsync--;
                        return 1;
+               }
                return cfgfile_yesno (option, value, _T("gfx_vsync_picasso"), &p->gfx_apmode[APMODE_RTG].gfx_vsync);
        }
        if (cfgfile_strval (option, value, _T("gfx_vsyncmode"), &p->gfx_apmode[APMODE_NATIVE].gfx_vsyncmode, vsyncmodes2, 0))
index 5a78aaefcac05d8f861a5fd192589fddbb476f36..001ce47110ffa5367fc05ef4c61c536272a76129 100644 (file)
@@ -1743,7 +1743,7 @@ static void pfield_set_linetoscr (void)
                        switch (gfxvidinfo.drawbuffer.pixbytes) {
                                case 2:
                                pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_stretch2_aga_genlock : linetoscr_16_stretch2_aga;
-                               pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_stretch2_aga_spr_genlock : linetoscr_16_stretch2_aga_spr_genlock;
+                               pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_stretch2_aga_spr_genlock : linetoscr_16_stretch2_aga_spr;
                                pfield_do_linetoscr_spriteonly = linetoscr_16_stretch2_aga_spronly;
                                break;
                                case 4:
@@ -2012,12 +2012,13 @@ static void init_ham_decoding (void)
                } else { /* AGA mode HAM6 */
                        while (unpainted_amiga-- > 0) {
                                int pv = pixdata.apixels[ham_decode_pixel++] ^ bplxor;
+                               uae_u32 pc = ((pv & 0xf) << 0) | ((pv & 0xf) << 4);
                                switch (pv & 0x30)
                                {
                                case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv] & 0xffffff; break;
-                               case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= (pv & 0xF) << 4; break;
-                               case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= (pv & 0xF) << 20; break;
-                               case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= (pv & 0xF) << 12; break;
+                               case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= pc << 0; break;
+                               case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= pc << 16; break;
+                               case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= pc << 8; break;
                                }
                        }
                }
@@ -2071,12 +2072,13 @@ static void decode_ham (int pix, int stoppos, bool blank)
                } else { /* AGA mode HAM6 */
                        while (todraw_amiga-- > 0) {
                                int pv = pixdata.apixels[ham_decode_pixel] ^ bplxor;
+                               uae_u32 pc = ((pv & 0xf) << 0) | ((pv & 0xf) << 4);
                                switch (pv & 0x30)
                                {
                                case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv] & 0xffffff; break;
-                               case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= (pv & 0xF) << 4; break;
-                               case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= (pv & 0xF) << 20; break;
-                               case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= (pv & 0xF) << 12; break;
+                               case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= pc << 0; break;
+                               case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= pc << 16; break;
+                               case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= pc << 8; break;
                                }
                                ham_linebuf[ham_decode_pixel++] = ham_lastcolor;
                        }
@@ -4162,7 +4164,7 @@ void drawing_init (void)
 
 int isvsync_chipset (void)
 {
-       if (picasso_on || !currprefs.gfx_apmode[0].gfx_vsync || (currprefs.gfx_apmode[0].gfx_vsync == 0 && !currprefs.gfx_apmode[0].gfx_fullscreen))
+       if (picasso_on || currprefs.gfx_apmode[0].gfx_vsync <= 0 || (currprefs.gfx_apmode[0].gfx_vsync <= 0 && !currprefs.gfx_apmode[0].gfx_fullscreen))
                return 0;
        if (currprefs.gfx_apmode[0].gfx_vsyncmode == 0)
                return 1;
@@ -4173,7 +4175,7 @@ int isvsync_chipset (void)
 
 int isvsync_rtg (void)
 {
-       if (!picasso_on || !currprefs.gfx_apmode[1].gfx_vsync || (currprefs.gfx_apmode[1].gfx_vsync == 0 && !currprefs.gfx_apmode[1].gfx_fullscreen))
+       if (!picasso_on || currprefs.gfx_apmode[1].gfx_vsync <= 0 || (currprefs.gfx_apmode[1].gfx_vsync <= 0 && !currprefs.gfx_apmode[1].gfx_fullscreen))
                return 0;
        if (currprefs.gfx_apmode[1].gfx_vsyncmode == 0)
                return 1;
index 9de97a21bcd92ed868df5ce8b863ff8bbea836f4..d38204f9cdcbabbf1c7dd0032fc8f958a6a90d0c 100644 (file)
@@ -1221,9 +1221,12 @@ static addrbank *expamem_map_uaeboard(void)
 {
        uaeboard_base = expamem_z2_pointer;
        uaeboard_ram_start = UAEBOARD_WRITEOFFSET;
+       uaeboard_bank.start = uaeboard_base;
        map_banks_z2(&uaeboard_bank, uaeboard_base >> 16, 1);
-       if (currprefs.uaeboard > 1)
+       if (currprefs.uaeboard > 1) {
+               rtarea_bank.start = uaeboard_base + 65536;
                map_banks_z2(&rtarea_bank, (uaeboard_base + 65536) >> 16, 1);
+       }
        return &uaeboard_bank;
 }
 
@@ -1244,7 +1247,7 @@ static addrbank* expamem_init_uaeboard(int devnum)
 
        expamem_write(0x18, 0x00); /* ser.no. Byte 0 */
        expamem_write(0x1c, 0x00); /* ser.no. Byte 1 */
-       expamem_write(0x20, 0x00); /* ser.no. Byte 2 */
+       expamem_write(0x20, currprefs.uaeboard); /* ser.no. Byte 2 */
        expamem_write(0x24, 0x02); /* ser.no. Byte 3 */
 
        uae_u8 *p = uaeboard_bank.baseaddr;
index 06bd51684a9885a8280a4e7301fd5e2bc240bb6b..ca0781346ad767a99a968520698e695621a641b7 100644 (file)
@@ -93,7 +93,7 @@ startjmp:
        bra.w filesys_mainloop          ;1 16
        dc.l make_dev-start                     ;2 20
        dc.l filesys_init-start         ;3 24
-       dc.l 0          ;4 28
+       dc.l moverom-start              ;4 28
        dc.l bootcode-start                     ;5 32
        dc.l setup_exter-start          ;6 36
        dc.l bcplwrapper-start ;7 40
@@ -432,7 +432,7 @@ mountproc
        dc.l 0
        moveq #2,d1
        move.w #$FF48,d0 ; get new unit number
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        move.l d0,d1
        bmi.s .out
@@ -498,7 +498,7 @@ exter_task_wait
        moveq #10,d7
 EXTT_loop
        move.w #$FF50,d0 ; exter_int_helper
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        move.l d7,d0
        jsr (a0)
        tst.l d0
@@ -554,7 +554,7 @@ EXTT_shellexec
        bsr.w createproc
        move.l d0,d1
        move.w #$FF50,d0 ; exter_int_helper
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #20,d0
        jsr (a0)
        bra.w EXTT_loop
@@ -596,7 +596,7 @@ shellexecproc:
        
 .seproc1
        move.w #$FF50,d0 ; exter_int_helper
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #21,d0
        jsr (a0)
        ; a0 = command
@@ -665,7 +665,7 @@ shellexecproc:
        move.l a4,sp
 
        move.w #$FF50,d0 ; exter_int_helper
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #22,d0
        jsr (a0)
 
@@ -679,7 +679,7 @@ heartbeatvblank:
 
        move.w #$FF38,d0
        moveq #18,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        move.l d2,d0
        move.l d3,d2
        jsr (a0)
@@ -790,7 +790,7 @@ setup_exter:
 
        move.w #$FF38,d0
        moveq #4,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        tst.l d0
        beq.s .nomh
@@ -1314,7 +1314,7 @@ make_dev: ; IN: A0 param_packet, D6: unit_no
        bsr.w getrtbase
        move.l (a0),a5
        move.w #$FF28,d0 ; fill in unit-dependent info (filesys_dev_storeinfo)
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        move.l a0,a1
        move.l (sp)+,a0
        clr.l PP_FSSIZE(a0) ; filesystem size
@@ -1352,7 +1352,7 @@ mountalways
        ; do not mount but we might need to load possible custom filesystem(s)
        move.l a0,a1
        move.w #$FF20,d0 ; record in ui.startup (filesys_dev_remember)
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        bra.s dont_mount
 
@@ -1364,7 +1364,7 @@ do_mount:
        move.l a0,a1
        move.l d0,a3 ; devicenode
        move.w #$FF20,d0 ; record in ui.startup (filesys_dev_remember)
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        moveq #0,d0
        move.l d0,8(a3)          ; dn_Task
@@ -1406,7 +1406,7 @@ nordbfs2:
        move.l d0,d1
 
        move.w #$FF18,d0 ; update dn_SegList if needed (filesys_dev_bootfilesys)
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
 
        move.l d3,d0
@@ -1557,7 +1557,7 @@ addfsonthefly ; d1 = fs index
 
 clockreset:
        move.w #$ff58,d0 ; fsmisc_helper
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #3,d0 ; get time
        jsr (a0)
        move.l 168(a3),a1
@@ -1603,7 +1603,7 @@ filesys_mainloop_bcpl:
 
        move.l #12+20+(44+20+60+1)+3+4+4+4+(1+3)+4+4+4,d1
        move.w #$FF40,d0 ; startup_handler
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #1,d0
        jsr (a0)
        ; if d0 != 0, it becomes our memory space
@@ -1653,7 +1653,7 @@ filesys_mainloop_bcpl:
 .got_bcpl
 
        move.w #$FF40,d0 ; startup_handler
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #0,d0
        jsr (a0)
        move.l d0,d2
@@ -1710,7 +1710,7 @@ FSML_loop:
        beq.s .nodc
        ; call filesys_media_change_reply (pre)
        move.w #$ff58,d0 ; fsmisc_helper
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #1,d0 ; filesys_media_change_reply
        jsr (a0)
        tst.l d0
@@ -1720,7 +1720,7 @@ FSML_loop:
        clr.b 172(a3)
        ; call filesys_media_change_reply (post)
        move.w #$ff58,d0 ; fsmisc_helper
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #2,d0 ; filesys_media_change_reply
        jsr (a0)
 .nodc
@@ -1761,7 +1761,7 @@ nonnotif
 
        ; It's a dummy packet indicating that some queued command finished.
        move.w #$FF50,d0 ; exter_int_helper
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #1,d0
        jsr (a0)
 FSML_check_queue_other:
@@ -1804,7 +1804,7 @@ FSML_FromDOS:
 FSML_DoCommand:
        bsr.b LockCheck  ; Make sure there are enough locks for the C code to grab.
        move.w #$FF30,d0 ; filesys_handler
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        tst.l d0
        beq.b FSML_Reply
@@ -1834,7 +1834,7 @@ FSML_ReplyOne2:
        bne.s FSML_ReplyOne3
        ; Arghh.. we need more entries. (some buggy programs fail if eac_Entries = 0 with continue enabled)
        move.w #$ff58,d0 ; fsmisc_helper
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        moveq #0,d0 ; exall
        jsr (a0)
        bra.s .exaretry
@@ -2213,7 +2213,7 @@ getgfxlimits:
        move.w MH_FOO_MOFFSET(a5),d2
        move.w #$FF38,d0
        moveq #1,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
 
 .nosend
@@ -2259,7 +2259,7 @@ mousehack_task:
        ; send data structure address
        move.w #$FF38,d0
        moveq #5,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        move.l a4,d0
        jsr (a0)
 
@@ -2274,7 +2274,7 @@ mousehack_task:
        moveq #5,d0 ;INTB_VERTB
        jsr -$00a8(a6)
 
-mhloop
+mhloop:
        move.l d6,d0
        jsr -$013e(a6) ;Wait
 
@@ -2356,7 +2356,7 @@ mhloop
        ;tell native side that mousehack is now active
        move.w #$FF38,d0
        moveq #0,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        bra.w mhloop
 .yestim
@@ -2547,7 +2547,7 @@ mhloop
        jsr -$2a(a6) ;PeekQualifier
        move.l (sp)+,a6
        and.w #$7fff,d0
-       move.w d0,8(a2) ;ie_Qualifier
+       or.w d0,8(a2) ;ie_Qualifier
 .mhvpre36      
 
        bsr.w mhdoio
@@ -2626,7 +2626,7 @@ clipboard_init:
 
        move.w #$FF38,d0
        moveq #17,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        btst #0,d0
        beq.s .noclip
@@ -2642,7 +2642,7 @@ clipboard_init:
 
        move.w #$FF38,d0
        moveq #14,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        move.l a5,d0
        jsr (a0)
 
@@ -2660,7 +2660,7 @@ clipboard_init:
 clipkill
        move.w #$FF38,d0
        moveq #10,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        rts
 
@@ -2718,7 +2718,7 @@ prefsread:
        bne.s .pr4
        move.w #$FF38,d0
        moveq #16,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
 .pr1
        move.l d4,d1
@@ -2760,7 +2760,7 @@ clipboard_proc:
 
        move.w #$FF38,d0
        moveq #13,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        tst.l d0
        beq.w clipdie
@@ -2848,7 +2848,7 @@ cfversion
 
        move.w #$FF38,d0
        moveq #15,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        tst.l CLIP_WRITE_SIZE(a5)
        bne.s clipsignal
@@ -2875,7 +2875,7 @@ clipsignal
        ;and notify host-side
        move.w #$FF38,d0
        moveq #12,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        tst.l d0
        beq.s .nowrite
@@ -2945,7 +2945,7 @@ clipread:
        jsr -$01c8(a6) ;DoIO
        move.w #$FF38,d0
        moveq #11,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        move.l 32(a4),d0
        jsr (a0)
        move.l a2,a1
@@ -2987,7 +2987,7 @@ consolehook:
        moveq #-1,d2
        move.w #$FF38,d0
        moveq #17,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        btst #1,d0
        beq.s .ch2
@@ -3006,7 +3006,7 @@ consolehook:
        move.l a0,a1
        move.w #$FF38,d0
        moveq #101,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        moveq #1,d2
 .ch1
@@ -3020,7 +3020,7 @@ chook:
        movem.l d0-d1/a0,-(sp)
        move.w #$FF38,d0
        moveq #102,d1
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        movem.l (sp)+,d0-d1/a0
        rts
@@ -3043,7 +3043,7 @@ debuggerproc
        jsr -$0228(a6) ; OpenLibrary
        moveq #2,d1
        move.w #$FF78,d0
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        move.l a0,a2
        moveq #1,d1
        jsr (a0) ; debugger init
@@ -3198,7 +3198,7 @@ bcplwrapper_start:
        move.l d2,d1
        lea wb13ffspatches(pc),a1
        move.w #$FF68,d0
-       bsr.w getrtbase
+       bsr.w getrtbaselocal
        jsr (a0)
        jmp (a0)
        ;CopyMem() patches
@@ -3643,11 +3643,140 @@ hw_multi:
        rts
 
 
+       ; this is called from external executable
+
+moverom:
+       ; a0 = ram copy
+
+       move.l a0,a5 ; ram copy
+       
+       moveq #20,d7
+       move.l 4.w,a6
+
+       jsr -$0084(a6) ;Forbid
+       
+       move.w #$FF38,d0
+       bsr.w getrtbase
+       move.l a5,d2
+       moveq #19,d1
+       jsr (a0)
+       ;ROM is now write-enabled
+       ;d0 = temp space
+       tst.l d0
+       beq.w .mov1
+       move.l d0,a3
+       move.l (a3)+,a4 ; ROM
+
+       ; Copy ROM to RAM
+       move.l a4,a0
+       move.l a5,a1
+       move.w #65536/4-1,d0
+.mov5
+       move.l (a0)+,(a1)+
+       dbf d0,.mov5
+
+       move.l a5,d1
+       sub.l a4,d1
+
+       ; Handle relocations from UAE side
+       
+       ; Relative
+       move.l a3,a0
+.mov7
+       moveq #0,d0
+       move.w (a0)+,d0
+       beq.s .mov6
+       lea 0(a4,d0.l),a1
+       add.l d1,(a1)
+       lea 0(a5,d0.l),a1
+       add.l d1,(a1)
+       bra.s .mov7
+.mov6
+
+       ; Absolute
+.mov9
+       moveq #0,d0
+       move.l (a0)+,d0
+       beq.s .mov8
+       move.l d0,a1
+       add.l d1,(a1)
+       bra.s .mov9
+.mov8
+
+       moveq #0,d0
+       bsr.w getrtbase
+       lea getrtbase(pc),a1
+       sub.l a0,a1
+       
+       add.l a5,a1
+       ; replace RAM copy relative getrtbase
+       ; fetch with absolute lea rombase,a0
+       move.w #$41f9,(a1)+
+       move.l a4,(a1)+
+       ; and.l #$ffff,d0
+       move.w #$0280,(a1)+
+       move.l #$0000ffff,(a1)+
+       ; add.l d0,a0; rts
+       move.l #$d1c04e75,(a1)
+       
+       ; redirect some commonly used
+       ; functions to RAM code
+       lea moveromreloc(pc),a0
+.mov3
+       moveq #0,d0
+       move.w (a0)+,d0
+       beq.s .mov2
+       add.w #8+4,d0
+       lea 0(a4,d0.l),a1
+       ; JMP xxxxxxxx
+       move.w #$4ef9,(a1)+
+       lea 0(a5,d0.l),a2
+       move.l a2,(a1)
+       bra.s .mov3
+.mov2
+
+       cmp.w #36,20(a6)
+       bcs.s .mov4
+       jsr -$27c(a6) ; CacheClearU
+.mov4
+
+       ; Tell UAE that all is done
+       ; Re-enables write protection
+       move.w #$FF38,d0
+       bsr.w getrtbase
+       move.l a5,d2
+       moveq #20,d1
+       jsr (a0)
+       moveq #0,d7
+
+.mov1
+       jsr -$008a(a6)
+       
+       move.l d7,d0
+       rts
+       
+moveromreloc:
+       dc.w FSML_loop-start
+       dc.w mhloop-start
+       dc.w kaint-start
+       dc.w trap_task_wait-start
+       dc.w exter_task_wait-start
+       dc.w 0
+
+       cnop 0,4
+getrtbaselocal:
+       lea start-8-4(pc),a0
+       and.l #$FFFF,d0
+       add.l d0,a0
+       rts
+       cnop 0,4
 getrtbase:
        lea start-8-4(pc),a0
        and.l #$FFFF,d0
        add.l d0,a0
        rts
+       nop
+       nop
 
 inp_dev: dc.b 'input.device',0
 tim_dev: dc.b 'timer.device',0
index f3387d90c1a84a11bb187e7e278c16a6d7f91cd2..80b29f84d5ced88fa007333a584818bdae77faa8 100644 (file)
@@ -8674,12 +8674,21 @@ static uae_u32 REGPARAM2 mousehack_done (TrapContext *ctx)
                        v |= 1;
                if (consolehook_activate())
                        v |= 2;
+               if (currprefs.uaeboard > 2)
+                       v |= 4;
                trap_dos_active();
                return v;
        } else if (mode == 18) {
                put_long_host(rtarea_bank.baseaddr + RTAREA_EXTERTASK, trap_get_dreg(ctx, 0));
                put_long_host(rtarea_bank.baseaddr + RTAREA_TRAPTASK, trap_get_dreg(ctx, 2));
                return rtarea_base + RTAREA_HEARTBEAT;
+       } else if (mode == 19) {
+               // boot rom copy
+               // d2 = ram address
+               return boot_rom_copy(ctx, trap_get_dreg(ctx, 2), 0);
+       } else if (mode == 20) {
+               // boot rom copy done
+               return boot_rom_copy(ctx, trap_get_dreg(ctx, 2), 1);
        } else if (mode == 101) {
                consolehook_ret(ctx, trap_get_areg(ctx, 1), trap_get_areg(ctx, 2));
        } else if (mode == 102) {
index 5dedb8ba0a36fc9739fcc76c6a086e8438d42284..4607524dca314b5ba8dcf86816b954b1cf32c221 100644 (file)
@@ -1,10 +1,10 @@
  db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00);
  db(0x60); db(0x02); db(0x00); db(0x0b); db(0x60); db(0x00); db(0x0d); db(0xc6);
  db(0x00); db(0x00); db(0x0b); db(0x2c); db(0x00); db(0x00); db(0x00); db(0xa8);
- db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x2c);
+ db(0x00); db(0x00); db(0x20); db(0x86); db(0x00); db(0x00); db(0x00); db(0x2c);
  db(0x00); db(0x00); db(0x05); db(0x86); db(0x00); db(0x00); db(0x1c); db(0x8c);
  db(0x00); db(0x00); db(0x00); db(0x64); db(0x00); db(0x00); db(0x1c); db(0xe8);
- db(0x00); db(0x00); db(0x1d); db(0x3a); db(0x43); db(0xfa); db(0x21); db(0x79);
+ db(0x00); db(0x00); db(0x1d); db(0x3a); db(0x43); db(0xfa); db(0x22); db(0x57);
  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(0x00); db(0x00); db(0x00); db(0x07); db(0x00); db(0x00); db(0x00); db(0x00);
  db(0x60); db(0x00); db(0x0d); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x00);
  db(0x00); db(0x00); db(0x00); db(0x01); db(0x00); db(0x00); db(0x00); db(0x04);
  db(0x00); db(0x00); db(0x00); db(0x02); db(0x48); db(0xe7); db(0x3f); db(0x3e);
- db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x21); db(0x57);
+ db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x22); db(0x35);
  db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x22); db(0x00);
- db(0x30); db(0x3c); db(0x3f); db(0xf8); db(0x61); db(0x00); db(0x20); db(0x08);
- db(0x20); db(0x81); db(0x43); db(0xfa); db(0x21); db(0x2f); db(0x70); db(0x00);
+ db(0x30); db(0x3c); db(0x3f); db(0xf8); db(0x61); db(0x00); db(0x20); db(0xe2);
+ db(0x20); db(0x81); db(0x43); db(0xfa); db(0x22); db(0x0d); db(0x70); db(0x00);
  db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x22); db(0x00); db(0x30); db(0x3c);
- db(0x3f); db(0xf4); db(0x61); db(0x00); db(0x1f); db(0xf2); db(0x20); db(0x81);
+ db(0x3f); db(0xf4); db(0x61); db(0x00); db(0x20); db(0xcc); db(0x20); db(0x81);
  db(0x61); db(0x00); db(0x16); db(0x58); db(0x61); db(0x00); db(0x1a); db(0x20);
  db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x70); db(0x00); 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(0xec); db(0x61); db(0x00); db(0x1f); db(0xd0);
+ db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x20); db(0xaa);
  db(0x2a); db(0x50); db(0x7a); db(0x00); db(0x70); db(0x00); db(0x0c); db(0x6e);
  db(0x00); db(0x21); db(0x00); db(0x14); db(0x65); db(0x1c); db(0x43); db(0xfa);
- db(0x21); db(0x0e); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae);
+ db(0x21); db(0xec); 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(0x20); db(0xfe); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae);
+ db(0x21); db(0xdc); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae);
  db(0xfd); db(0xd8); db(0x28); db(0x40); db(0xc9); db(0x4e); db(0x20); db(0x0e);
  db(0x67); db(0x3c); db(0x08); db(0x2d); db(0x00); db(0x04); db(0x01); db(0x13);
  db(0x66); db(0x34); db(0x4e); db(0xae); db(0xff); db(0xd0); db(0x4a); db(0x80);
  db(0x00); db(0x22); db(0x00); db(0x14); db(0x65); db(0x6e); db(0x78); db(0x03);
  db(0x0c); db(0x6e); db(0x00); db(0x24); db(0x00); db(0x14); db(0x65); db(0x04);
  db(0x00); db(0x44); db(0x01); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x80);
- db(0x61); db(0x00); db(0x1e); db(0xcc); db(0x4e); db(0x90); db(0x2a); db(0x00);
+ db(0x61); db(0x00); db(0x1f); db(0xa6); db(0x4e); db(0x90); db(0x2a); db(0x00);
  db(0x20); db(0x49); db(0x20); db(0x01); db(0x67); db(0x0c); db(0x22); db(0x04);
- db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x20); db(0x30); db(0x4e); db(0xae);
+ db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x21); db(0x0e); db(0x4e); db(0xae);
  db(0xfd); db(0x96); db(0x43); db(0xf9); db(0x00); db(0x21); db(0x00); db(0x00);
  db(0x4e); db(0xae); db(0xfd); db(0xea); db(0x4a); db(0x80); db(0x66); db(0x18);
  db(0x22); db(0x04); db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20);
  db(0x00); db(0x00); db(0x20); db(0x05); db(0x90); db(0x88); db(0x65); db(0x08);
  db(0x67); db(0x06); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfd); db(0x96);
- db(0x41); db(0xfa); db(0x1f); db(0x56); db(0x43); db(0xfa); db(0x00); db(0x5a);
+ db(0x41); db(0xfa); db(0x20); db(0x34); db(0x43); db(0xfa); db(0x00); db(0x5a);
  db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0f); db(0x3c); db(0x22); db(0x40);
  db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00);
- db(0x1e); db(0x76); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff);
+ db(0x1f); db(0x50); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff);
  db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3c); db(0x22); db(0x7a); db(0x00);
  db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00); db(0x28); db(0x01);
- db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); db(0x1f); db(0x79);
+ db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); db(0x20); db(0x57);
  db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80);
  db(0x67); db(0x16); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0xe4); db(0x8b);
  db(0x4e); db(0xae); db(0xff); db(0x76); db(0x2a); db(0x00); db(0x22); db(0x4e);
  db(0x20); db(0x05); db(0x4c); db(0xdf); db(0x44); db(0x3c); db(0x4e); db(0x75);
  db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0);
  db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa);
- db(0x1f); db(0x19); db(0x43); db(0xfa); db(0x00); db(0x14); db(0x70); db(0x0f);
+ db(0x1f); db(0xf7); db(0x43); db(0xfa); db(0x00); db(0x14); db(0x70); db(0x0f);
  db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00);
  db(0xff); db(0xa2); db(0x60); db(0xdc); 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(0x1d); db(0xfa); db(0x4e); db(0x90);
+ db(0xff); db(0x48); db(0x61); db(0x00); db(0x1e); db(0xc4); db(0x4e); db(0x90);
  db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x0a); db(0x90);
  db(0x70); db(0x00); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0x01); db(0x00); db(0x4e); db(0xae);
  db(0xfe); db(0xc2); db(0x7e); db(0x00); db(0x20); db(0x3c); db(0x00); db(0x00);
- db(0xf0); db(0x00); db(0x61); db(0x00); db(0x1d); db(0xd2); db(0x22); db(0x48);
+ db(0xf0); db(0x00); db(0x61); db(0x00); db(0x1e); db(0xac); db(0x22); db(0x48);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0x40); db(0x00); db(0x61); db(0x00);
- db(0x1d); db(0xc6); db(0x7c); db(0x03); db(0x4a); db(0x29); db(0x00); db(0x03);
+ db(0x1e); db(0xa0); db(0x7c); db(0x03); db(0x4a); db(0x29); db(0x00); db(0x03);
  db(0x67); db(0x42); db(0x0c); db(0x29); db(0x00); db(0xfd); db(0x00); db(0x07);
  db(0x66); db(0x3a); db(0x52); db(0x87); db(0x49); db(0xe8); db(0x00); db(0x54);
  db(0x4b); db(0xe9); db(0x00); db(0x04); db(0x48); db(0xe7); db(0x03); db(0xce);
  db(0xff); db(0x8a); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x3c);
  db(0x00); db(0x00); db(0x01); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0xc2);
  db(0x7e); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00);
- db(0x1d); db(0x4e); db(0x20); db(0x07); db(0x4e); db(0x90); db(0x4a); db(0x80);
+ db(0x1e); db(0x18); db(0x20); db(0x07); db(0x4e); db(0x90); db(0x4a); db(0x80);
  db(0x67); db(0x00); db(0xff); db(0xe4); db(0x7e); db(0x0b); db(0x0c); db(0x40);
  db(0x00); db(0x01); db(0x6d); db(0x00); db(0xff); db(0xe6); db(0x6e); db(0x06);
  db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xdc); db(0x0c); db(0x40);
  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(0x6c);
  db(0x0c); db(0x40); db(0x00); db(0x06); db(0x6e); db(0x00); db(0xff); db(0x64);
- db(0x41); db(0xfa); db(0x1e); db(0x46); db(0x43); db(0xfa); db(0x00); db(0x42);
+ db(0x41); db(0xfa); db(0x1f); db(0x24); db(0x43); db(0xfa); db(0x00); db(0x42);
  db(0x70); db(0x01); db(0x22); db(0x3c); db(0x00); db(0x00); db(0x27); db(0x10);
  db(0x61); db(0x00); db(0xfe); db(0x38); db(0x22); db(0x00); db(0x30); db(0x3c);
- db(0xff); db(0x50); db(0x61); db(0x00); db(0x1c); db(0x9a); db(0x70); db(0x14);
+ db(0xff); db(0x50); db(0x61); db(0x00); db(0x1d); db(0x64); db(0x70); db(0x14);
  db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x3e); db(0x70); db(0x00);
  db(0x20); db(0x59); db(0x4a); db(0x10); db(0x67); db(0x10); db(0x2c); db(0x59);
  db(0x22); db(0x51); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x01); db(0x00);
  db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x70); db(0x01); db(0x4a); db(0x40);
  db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10);
  db(0x00); db(0x00); db(0x00); db(0x00); db(0x2c); db(0x78); db(0x00); db(0x04);
- db(0x43); db(0xfa); db(0x1d); db(0x85); db(0x70); db(0x00); db(0x4e); db(0xae);
+ db(0x43); db(0xfa); db(0x1e); db(0x63); db(0x70); db(0x00); db(0x4e); db(0xae);
  db(0xfd); db(0xd8); db(0x2a); db(0x40); db(0xcb); db(0x4e); db(0x60); db(0x0e);
  db(0xcb); db(0x4e); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d);
  db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0xcb); db(0x4e); db(0x30); db(0x3c);
- db(0xff); db(0x50); db(0x61); db(0x00); db(0x1c); db(0x42); db(0x70); db(0x15);
+ db(0xff); db(0x50); db(0x61); db(0x00); db(0x1d); db(0x0c); db(0x70); db(0x15);
  db(0x4e); db(0x90); db(0x2e); db(0x08); db(0x67); db(0xe2); db(0x28); db(0x4f);
  db(0x4f); db(0xef); db(0xfd); db(0xd8); db(0x2c); db(0x0f); db(0x24); db(0x46);
  db(0x47); db(0xea); db(0x00); db(0x28); db(0x22); db(0x4b); db(0x20); db(0x47);
  db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x20); db(0x47); db(0x42); db(0x10);
  db(0x24); db(0xfc); db(0x80); db(0x00); db(0x00); db(0x21); db(0x41); db(0xfa);
- db(0x1c); db(0x73); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
+ db(0x1d); db(0x51); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
  db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x24); db(0xc0);
  db(0x24); db(0xfc); db(0x80); db(0x00); db(0x00); db(0x22); db(0x41); db(0xfa);
- db(0x1c); db(0x5b); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xff); db(0xe2);
+ db(0x1d); db(0x39); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xff); db(0xe2);
  db(0x24); db(0xc0); db(0x24); db(0xfc); db(0x80); db(0x00); db(0x00); db(0x23);
  db(0x70); db(0xff); db(0x24); db(0xc0); db(0x42); db(0x9a); db(0x42); db(0x92);
  db(0x0c); db(0x6e); db(0x00); db(0x24); db(0x00); db(0x14); db(0x64); db(0x20);
  db(0x00); db(0x0c); db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x60); db(0x08);
  db(0x22); db(0x0b); db(0x24); db(0x06); db(0x4e); db(0xae); db(0xfd); db(0xa2);
  db(0x2e); db(0x4c); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00);
- db(0x1b); db(0xae); db(0x70); db(0x16); db(0x4e); db(0x90); db(0x60); db(0x00);
+ db(0x1c); db(0x78); db(0x70); db(0x16); db(0x4e); db(0x90); db(0x60); db(0x00);
  db(0xff); db(0x50); db(0x48); db(0xe7); db(0xf0); db(0xf8); db(0x24); db(0x00);
  db(0x26); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x12);
- db(0x61); db(0x00); db(0x1b); db(0x94); db(0x20); db(0x02); db(0x24); db(0x03);
+ db(0x61); db(0x00); db(0x1c); db(0x5e); db(0x20); db(0x02); db(0x24); db(0x03);
  db(0x4e); db(0x90); db(0x24); db(0x40); db(0x70); db(0x2a); db(0x22); db(0x3c);
  db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a);
  db(0x28); db(0x40); db(0x47); db(0xec); db(0x00); db(0x16); db(0x22); db(0x4b);
  db(0x22); db(0xca); db(0x22); db(0xc2); db(0x22); db(0xc3); db(0x30); db(0x3c);
- db(0x3f); db(0xf4); db(0x61); db(0x00); db(0x1b); db(0x6a); db(0x22); db(0xc8);
- db(0x30); db(0x3c); db(0x3f); db(0xf0); db(0x61); db(0x00); db(0x1b); db(0x60);
+ db(0x3f); db(0xf4); db(0x61); db(0x00); db(0x1c); db(0x44); db(0x22); db(0xc8);
+ db(0x30); db(0x3c); db(0x3f); db(0xf0); db(0x61); db(0x00); db(0x1c); db(0x3a);
  db(0x22); db(0xc8); db(0x29); db(0x4b); db(0x00); db(0x0e); db(0x19); db(0x7c);
  db(0x00); db(0x02); db(0x00); db(0x08); db(0x19); db(0x7c); db(0x00); db(0xf6);
- db(0x00); db(0x09); db(0x41); db(0xfa); db(0x1b); db(0xfe); db(0x29); db(0x48);
+ db(0x00); db(0x09); db(0x41); db(0xfa); db(0x1c); db(0xdc); db(0x29); db(0x48);
  db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0x14); db(0x29); db(0x48);
  db(0x00); db(0x12); db(0x22); db(0x4c); db(0x70); db(0x05); db(0x4e); db(0xae);
  db(0xff); db(0x58); db(0x4c); db(0xdf); db(0x1f); db(0x0f); db(0x4e); db(0x75);
  db(0x67); db(0x08); db(0x22); db(0x69); db(0x00); db(0x10); db(0x22); db(0xa8);
  db(0x00); db(0x44); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7);
  db(0xf1); db(0xe0); db(0x2e); db(0x00); db(0x20); db(0x3c); db(0x00); db(0x00);
- db(0xff); db(0xfc); db(0x61); db(0x00); db(0x1a); db(0xf2); db(0x24); db(0x48);
+ db(0xff); db(0xfc); db(0x61); db(0x00); db(0x1b); db(0xcc); db(0x24); db(0x48);
  db(0x74); db(0x00); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x10);
- db(0x41); db(0xfa); db(0x1b); db(0xc1); db(0x43); db(0xfa); db(0xfd); db(0x7c);
+ db(0x41); db(0xfa); db(0x1c); db(0x9f); db(0x43); db(0xfa); db(0xfd); db(0x7c);
  db(0x70); db(0x14); db(0x61); db(0x00); db(0x0b); db(0x94); db(0x24); db(0x00);
  db(0x76); db(0x00); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x10);
- db(0x41); db(0xfa); db(0x1b); db(0xb7); db(0x43); db(0xfa); db(0xfc); db(0xde);
+ db(0x41); db(0xfa); db(0x1c); db(0x95); db(0x43); db(0xfa); db(0xfc); db(0xde);
  db(0x70); db(0x19); db(0x61); db(0x00); db(0x0b); db(0x7c); db(0x26); db(0x00);
  db(0x70); db(0x2a); 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(0xe9);
  db(0x00); db(0x1a); db(0x20); db(0xca); db(0x20); db(0xce); db(0x20); db(0xc2);
- db(0x20); db(0x83); db(0x41); db(0xfa); db(0x1b); db(0x65); db(0x23); db(0x48);
+ db(0x20); db(0x83); db(0x41); db(0xfa); db(0x1c); db(0x43); db(0x23); db(0x48);
  db(0x00); db(0x0a); db(0x45); db(0xe9); db(0x00); db(0x1a); db(0x23); db(0x4a);
  db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xfe); db(0x02); 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(0x20); db(0x02);
  db(0x22); db(0x03); db(0x61); db(0x00); db(0xfe); db(0xd6); db(0x30); db(0x3c);
- db(0xff); db(0x38); db(0x72); db(0x04); db(0x61); db(0x00); db(0x1a); db(0x70);
+ db(0xff); db(0x38); db(0x72); db(0x04); db(0x61); db(0x00); db(0x1b); db(0x3a);
  db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00);
  db(0x0b); db(0x7c); db(0x4c); db(0xdf); db(0x07); db(0x8f); db(0x4e); db(0x75);
  db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x43); db(0xeb); db(0x01); db(0xac); 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(0x1a); db(0xe3);
+ db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x1b); db(0xc1);
  db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x9c);
  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(0x60); db(0xf2); db(0x48); db(0xe7); db(0x40); db(0xf2); db(0x26); db(0x48);
  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(0x1a); db(0x54); db(0x10); db(0x19);
+ db(0x00); db(0x0a); db(0x45); db(0xfa); db(0x1b); db(0x32); db(0x10); db(0x19);
  db(0x12); db(0x1a); db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00);
  db(0x67); db(0x46); 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(0x1a); db(0x2a);
- db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x19); db(0x83);
+ db(0x00); db(0x08); db(0x00); db(0x08); db(0x41); db(0xfa); db(0x1b); db(0x08);
+ db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x1a); db(0x61);
  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(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(0x4c);
  db(0x21); db(0x40); db(0x01); db(0x9c); db(0x2f); db(0x08); db(0x30); db(0x3c);
- db(0xff); db(0xec); db(0x61); db(0x00); db(0x15); db(0x4a); db(0x2a); db(0x50);
- db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x15); db(0x40);
+ db(0xff); db(0xec); db(0x61); db(0x00); db(0x16); db(0x24); db(0x2a); db(0x50);
+ db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x16); db(0x0a);
  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(0xf6); db(0xba);
  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(0x15); db(0x00);
+ db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x15); db(0xca);
  db(0x4e); db(0x90); db(0x60); db(0x26); db(0x2c); db(0x4c); db(0x2f); db(0x08);
  db(0x61); db(0x00); db(0x0f); db(0xf6); 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(0x14); db(0xe6); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40);
+ db(0x15); db(0xb0); 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(0x20); db(0x69); db(0x01); db(0x94); db(0x4a); db(0xa9);
  db(0x01); db(0x90); db(0x67); db(0x2c); db(0x20); db(0x08); db(0x67); db(0x32);
  db(0x4a); db(0xa9); db(0x01); db(0x98); db(0x67); db(0x04); db(0x61); db(0x00);
  db(0xfa); db(0x38); db(0x4a); db(0x83); db(0x6b); db(0x00); db(0xf6); db(0x22);
  db(0x2c); db(0x78); db(0x00); db(0x04); db(0x2f); db(0x09); db(0x43); db(0xfa);
- db(0x16); db(0x0c); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x22); db(0x5f);
+ db(0x16); db(0xea); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x22); db(0x5f);
  db(0x22); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00);
- db(0x14); db(0x76); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29);
+ db(0x15); db(0x40); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29);
  db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x24); db(0x27); db(0x7c);
  db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); db(0x41); db(0xfa);
  db(0xf3); db(0xd4); db(0x70); db(0xff); db(0x22); db(0x0c); db(0x66); db(0x06);
  db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x42); 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(0x14); db(0xb1);
+ db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x15); db(0x8f);
  db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x2c); db(0x40); db(0x22); db(0x0a);
  db(0x26); db(0x0f); db(0x4f); db(0xea); db(0x10); db(0x04); db(0x4e); db(0xae);
  db(0xff); db(0x52); db(0x2e); db(0x43); db(0x26); db(0x01); db(0x22); db(0x4e);
  db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e);
  db(0x22); db(0x03); 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(0x14); db(0xa2); db(0x70); db(0x24);
+ db(0x00); db(0x04); db(0x43); db(0xfa); db(0x15); db(0x80); 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(0x14); db(0x90);
+ db(0x08); db(0x87); db(0x00); db(0x02); db(0x43); db(0xfa); db(0x15); db(0x6e);
  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(0x38); db(0x22); db(0x3c);
  db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x38); 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(0x30); db(0x3c);
- db(0xff); db(0x58); db(0x61); db(0x00); db(0x12); db(0xe2); db(0x70); db(0x03);
+ db(0xff); db(0x58); db(0x61); db(0x00); db(0x13); db(0xac); db(0x70); db(0x03);
  db(0x4e); db(0x90); db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x23); db(0x40);
  db(0x00); db(0x20); db(0x67); db(0x16); db(0x70); db(0x00); db(0x23); db(0x40);
  db(0x00); db(0x24); db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c);
  db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x7e); db(0x00); 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(0x13); db(0xc7); db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x24); db(0x40);
+ db(0x14); db(0xa5); db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x24); db(0x40);
  db(0x22); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbc); db(0x30); db(0x3c);
- db(0xff); db(0x40); db(0x61); db(0x00); db(0x12); db(0x92); db(0x70); db(0x01);
+ db(0xff); db(0x40); db(0x61); db(0x00); db(0x13); db(0x5c); db(0x70); db(0x01);
  db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x66); db(0x0c); db(0x20); db(0x01);
  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(0x4a); db(0x00); db(0xa0); db(0x50); db(0xeb); db(0x00); db(0x9e);
  db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0xb8); db(0x93); db(0xc9);
  db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0);
- db(0x41); db(0xfa); db(0x12); db(0x62); db(0x70); db(0x00); db(0x72); db(0x00);
+ db(0x41); db(0xfa); db(0x13); db(0x40); db(0x70); db(0x00); db(0x72); db(0x00);
  db(0x61); db(0x00); db(0x02); db(0xcc); db(0x27); db(0x40); db(0x00); db(0xa4);
- db(0x41); db(0xfa); db(0x12); db(0x5f); db(0x70); db(0x00); db(0x72); db(0x00);
+ db(0x41); db(0xfa); db(0x13); db(0x3d); db(0x70); db(0x00); db(0x72); db(0x00);
  db(0x61); db(0x00); db(0x02); db(0xbc); db(0x27); db(0x40); db(0x00); db(0xa8);
  db(0x7a); db(0x00); db(0x26); db(0x07); db(0x66); db(0x12); 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(0x12); db(0x18);
+ db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); db(0x12); db(0xe2);
  db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); db(0x61); db(0x00);
  db(0xfb); db(0xc2); db(0x70); db(0x01); db(0x61); db(0x00); db(0xf9); db(0x72);
  db(0x08); db(0x02); db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01);
  db(0x00); db(0x01); db(0x00); db(0xad); db(0x67); db(0x0a); db(0x61); db(0x00);
  db(0x0c); db(0x62); db(0x08); db(0xab); db(0x00); db(0x01); db(0x00); db(0xad);
  db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x67); db(0x24); db(0x30); db(0x3c);
- db(0xff); db(0x58); db(0x61); db(0x00); db(0x11); db(0xaa); db(0x70); db(0x01);
+ db(0xff); db(0x58); db(0x61); db(0x00); db(0x12); db(0x74); db(0x70); db(0x01);
  db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00);
  db(0xfb); db(0x78); db(0x42); db(0x2b); db(0x00); db(0xac); db(0x30); db(0x3c);
- db(0xff); db(0x58); db(0x61); db(0x00); db(0x11); db(0x92); db(0x70); db(0x02);
+ db(0xff); db(0x58); db(0x61); db(0x00); db(0x12); db(0x5c); db(0x70); db(0x02);
  db(0x4e); db(0x90); db(0x20); db(0x0c); db(0x67); db(0x56); db(0x0c); db(0x6c);
  db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4e); db(0x0c); db(0xac);
  db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x44);
  db(0x60); db(0x00); db(0xff); db(0x3e); db(0x74); db(0xfe); db(0x20); db(0x0c);
  db(0x67); db(0x14); db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x42);
  db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00);
- db(0x11); db(0x1e); db(0x70); db(0x01); db(0x4e); db(0x90); db(0x45); db(0xeb);
+ db(0x11); db(0xe8); 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(0x18); db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28);
  db(0x00); db(0x04); db(0xb4); db(0x80); db(0x66); db(0x16); db(0x48); db(0xe7);
  db(0x60); db(0xd2); 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(0x5e); db(0x30); db(0x3c);
- db(0xff); db(0x30); db(0x61); db(0x00); db(0x10); db(0xca); db(0x4e); db(0x90);
+ db(0xff); db(0x30); db(0x61); db(0x00); db(0x11); db(0x94); 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(0xfe); db(0xc0); db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00);
  db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); db(0xfa); db(0x3a);
  db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09); db(0x00); db(0x08);
  db(0x66); db(0x14); db(0x61); db(0x00); db(0xfa); db(0x92); db(0x66); db(0x0e);
- db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x10); db(0x88);
+ db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x11); db(0x52);
  db(0x70); db(0x00); db(0x4e); db(0x90); db(0x60); db(0xec); 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(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(0x0f); db(0x8b);
+ db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x10); db(0x69);
  db(0x43); db(0xfa); db(0x01); db(0x50); db(0x70); db(0x13); db(0x61); db(0x00);
  db(0xff); db(0x98); db(0x4e); db(0x75); db(0x9e); db(0xfc); db(0x00); db(0x18);
  db(0x42); db(0x92); db(0x42); db(0xaa); db(0x00); db(0x0e); db(0x42); db(0xaa);
  db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04);
  db(0x47); db(0xed); db(0x00); db(0x90); db(0x34); db(0x2d); db(0x00); db(0x2c);
  db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00);
- db(0x0d); db(0x9e); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f);
+ db(0x0e); db(0x68); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f);
  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(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x70); db(0x00); db(0x30); db(0x3c);
  db(0x02); db(0x14); 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(0x30); db(0x3c);
- db(0x3e); db(0x00); db(0x61); db(0x00); db(0x0d); db(0x5a); db(0x2b); db(0x48);
+ db(0x3e); db(0x00); db(0x61); db(0x00); db(0x0e); db(0x34); db(0x2b); db(0x48);
  db(0x02); db(0x10); db(0x28); db(0x48); db(0x47); db(0xed); db(0x00); db(0x16);
  db(0x27); db(0x4e); db(0x00); db(0x10); db(0x27); db(0x4a); 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(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x05);
- db(0x61); db(0x00); db(0x0d); db(0x34); db(0x20); db(0x0c); db(0x4e); db(0x90);
+ db(0x61); db(0x00); db(0x0d); db(0xfe); db(0x20); db(0x0c); db(0x4e); db(0x90);
  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(0x0d); db(0xbf); db(0x23); db(0x48); db(0x00); db(0x0a);
+ db(0x41); db(0xfa); db(0x0e); db(0x9d); db(0x23); db(0x48); db(0x00); db(0x0a);
  db(0x41); db(0xfa); db(0x03); db(0x2e); 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(0x22); db(0x4a); db(0xab); db(0x00); db(0x1c);
- db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x0e); db(0x0f); db(0x70); db(0x00);
+ db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x0e); db(0xed); db(0x70); db(0x00);
  db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x14);
  db(0x67); db(0xd0); db(0x22); db(0x00); db(0x30); db(0x3c); db(0x3f); db(0xf4);
- db(0x61); db(0x00); db(0x0c); db(0xcc); db(0x20); db(0x81); db(0x4a); db(0xab);
+ db(0x61); db(0x00); db(0x0d); db(0xa6); db(0x20); db(0x81); db(0x4a); db(0xab);
  db(0x00); db(0x18); db(0x66); db(0x24); db(0x4a); db(0xab); db(0x00); db(0x1c);
- db(0x66); db(0xb8); db(0x43); db(0xfa); db(0x0d); db(0xf9); db(0x70); db(0x00);
+ db(0x66); db(0xb8); db(0x43); db(0xfa); db(0x0e); db(0xd7); 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(0xa8); db(0x22); db(0x00); db(0x30); db(0x3c);
- db(0x3f); db(0xf8); db(0x61); db(0x00); db(0x0c); db(0xa2); db(0x20); db(0x81);
+ db(0x3f); db(0xf8); db(0x61); db(0x00); db(0x0d); db(0x7c); db(0x20); db(0x81);
  db(0x4a); db(0xad); db(0x02); db(0x08); db(0x66); db(0x3a); db(0x4a); db(0xab);
  db(0x00); db(0x1c); db(0x66); db(0x8e); db(0x4e); db(0xae); db(0xff); db(0x7c);
- db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x0c); db(0x96);
+ db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x0d); db(0x74);
  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(0x74);
- db(0x41); db(0xfa); db(0x0c); db(0x82); db(0x70); db(0x00); db(0x72); db(0x00);
+ db(0x41); db(0xfa); db(0x0d); db(0x60); db(0x70); db(0x00); db(0x72); db(0x00);
  db(0x61); db(0x00); db(0xfc); db(0xec); db(0x2b); db(0x40); db(0x02); db(0x08);
  db(0x67); db(0x00); db(0x02); db(0x52); db(0x60); db(0x00); db(0xff); db(0x5c);
  db(0x4a); db(0xad); db(0x02); db(0x0c); db(0x66); db(0x48); db(0x4a); db(0xab);
  db(0x00); db(0x1c); db(0x66); db(0x00); db(0xff); db(0x4e); db(0x4e); db(0xae);
  db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa);
- db(0x0c); db(0x61); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00);
+ db(0x0d); db(0x3f); 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(0x32); db(0x41); db(0xfa); db(0x0c); db(0x4d); db(0x70); db(0x00);
+ db(0xff); db(0x32); db(0x41); db(0xfa); db(0x0d); db(0x2b); db(0x70); db(0x00);
  db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xaa); db(0x2b); db(0x40);
  db(0x02); db(0x0c); db(0x67); db(0x00); db(0x02); db(0x10); db(0x30); db(0x3c);
- db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); db(0x0c); db(0x18);
+ db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); db(0x0c); db(0xe2);
  db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x0e); db(0x0c); db(0x47);
  db(0x00); db(0x24); db(0x65); db(0x18); db(0x0c); db(0x47); db(0x00); db(0x32);
  db(0x64); db(0x12); db(0x53); db(0xab); db(0x00); db(0x34); db(0x6a); db(0x0c);
  db(0x00); db(0x14); db(0x65); db(0x18); db(0x2f); db(0x0e); db(0x2c); db(0x6d);
  db(0x02); db(0x08); db(0x2c); db(0x6e); db(0x00); db(0x14); db(0x4e); db(0xae);
  db(0xff); db(0xd6); db(0x2c); db(0x5f); db(0x02); db(0x40); db(0x7f); db(0xff);
- db(0x35); db(0x40); db(0x00); db(0x08); db(0x61); db(0x00); db(0xfb); db(0x3e);
+ db(0x81); db(0x6a); db(0x00); db(0x08); db(0x61); db(0x00); db(0xfb); db(0x3e);
  db(0x60); db(0x00); db(0xfd); db(0x10); db(0x4e); db(0x75); db(0x22); db(0x2c);
  db(0x00); db(0x22); db(0x70); db(0x00); db(0x08); db(0x01); db(0x00); db(0x00);
  db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0e); db(0x08); db(0x01);
  db(0x22); db(0x69); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0xbc);
  db(0x22); db(0x5f); db(0x53); db(0x69); db(0x00); db(0x46); db(0x6a); db(0x10);
  db(0x33); db(0x7c); db(0x00); db(0x32); db(0x00); db(0x46); db(0x30); db(0x3c);
- db(0xff); db(0xff); db(0x61); db(0x00); db(0x09); db(0xa2); db(0x50); db(0xd0);
+ db(0xff); db(0xff); db(0x61); db(0x00); db(0x0a); db(0x7c); db(0x50); db(0xd0);
  db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); db(0x70); db(0x00);
  db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x06); db(0x30); db(0x3c);
- db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); db(0x09); db(0x88);
+ db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); db(0x0a); db(0x52);
  db(0x4e); db(0x90); db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x42);
  db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x3c); db(0x00); db(0x00);
  db(0x00); db(0x88); 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(0x40); db(0x2a); db(0x40); db(0x2b); db(0x4e); db(0x00); db(0x14);
  db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0e); db(0x61); db(0x00);
- db(0x09); db(0x56); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa);
- db(0x09); db(0xdb); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6);
+ db(0x0a); db(0x20); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa);
+ db(0x0a); db(0xb9); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6);
  db(0x22); db(0x3c); db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00);
  db(0xea); db(0xd2); db(0x70); db(0x00); db(0x4c); db(0xdf); db(0x60); db(0x00);
  db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0a);
- db(0x61); db(0x00); db(0x09); db(0x2c); db(0x4e); db(0x90); db(0x4e); db(0x75);
+ db(0x61); db(0x00); db(0x09); db(0xf6); db(0x4e); db(0x90); db(0x4e); db(0x75);
  db(0x61); db(0xf0); db(0x20); db(0x0d); db(0x67); db(0x1c); db(0x2c); db(0x6d);
  db(0x00); db(0x14); db(0x20); db(0x2d); db(0x00); db(0x18); db(0x67); db(0x06);
  db(0x22); db(0x40); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4d);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x4e); db(0xae);
  db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7);
  db(0x38); db(0x3e); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa);
- db(0x09); db(0x69); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
+ db(0x0a); db(0x47); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
  db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00);
  db(0x67); db(0x4c); db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92);
  db(0x34); db(0xaa); db(0x00); db(0x02); db(0x24); db(0x0a); db(0x54); db(0x82);
  db(0x76); db(0x20); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6);
  db(0xb6); db(0x80); db(0x66); db(0x12); db(0x4a); db(0x6a); db(0x00); db(0x10);
  db(0x66); db(0xc4); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x10);
- db(0x61); db(0x00); db(0x08); db(0x9c); db(0x4e); db(0x90); db(0x22); db(0x04);
+ db(0x61); db(0x00); db(0x09); db(0x66); db(0x4e); db(0x90); db(0x22); db(0x04);
  db(0x67); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x4c); db(0xdf);
  db(0x7c); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x6d); db(0x00); db(0x18);
- db(0x41); db(0xfa); db(0x08); db(0xdc); db(0x22); db(0x08); db(0x74); db(0xfe);
+ db(0x41); db(0xfa); db(0x09); db(0xba); db(0x22); db(0x08); db(0x74); db(0xfe);
  db(0x4e); db(0xae); db(0xff); db(0xac); db(0x22); db(0x00); db(0x67); db(0x34);
  db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14);
  db(0x45); db(0xed); db(0x00); db(0x38); db(0x70); db(0xff); db(0x4e); db(0xae);
  db(0xfe); db(0xb6); db(0x15); db(0x40); db(0x00); db(0x14); db(0x41); db(0xfa);
- db(0x08); db(0xd1); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00);
+ db(0x09); db(0xaf); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00);
  db(0x00); db(0x12); db(0x00); db(0x0c); db(0x25); db(0x6d); db(0x00); db(0x08);
  db(0x00); db(0x10); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x22); db(0x0a);
  db(0x4e); db(0xae); db(0xfc); db(0x88); db(0x2c); db(0x6d); db(0x00); db(0x14);
  db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10);
  db(0x00); db(0x00); db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38);
- db(0x72); db(0x0d); db(0x61); db(0x00); db(0x08); db(0x2a); db(0x4e); db(0x90);
+ db(0x72); db(0x0d); db(0x61); db(0x00); db(0x08); db(0xf4); db(0x4e); db(0x90);
  db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xfc); db(0x2a); db(0x40);
  db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae);
  db(0xfe); db(0xda); db(0x2b); db(0x40); db(0x00); db(0x08); db(0x43); db(0xfa);
- db(0x09); db(0x2f); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
+ db(0x0a); db(0x0d); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
  db(0x2b); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xfe); db(0xda);
  db(0x2c); db(0x40); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a);
- db(0x41); db(0xfa); db(0x08); db(0x30); db(0x22); db(0x08); db(0x74); db(0xfe);
+ db(0x41); db(0xfa); db(0x09); db(0x0e); db(0x22); db(0x08); db(0x74); db(0xfe);
  db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0xea);
  db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x72); db(0x32);
- db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x08); db(0x1a);
+ db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x08); db(0xf8);
  db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac);
  db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xa4); db(0x22); db(0x00);
  db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14);
  db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0x84); db(0x70); db(0x00);
  db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2);
  db(0x72); db(0x00); db(0x20); db(0x2d); db(0x00); db(0x0c); db(0x41); db(0xfa);
- db(0x07); db(0xf8); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44);
+ db(0x08); db(0xd6); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44);
  db(0x4a); db(0x80); db(0x66); db(0xe2); db(0x20); db(0x6c); db(0x00); db(0x14);
  db(0x0c); db(0x68); db(0x00); db(0x25); db(0x00); db(0x14); db(0x64); db(0x0c);
  db(0x61); db(0x00); db(0xfe); db(0x48); db(0x70); db(0x00); db(0x4e); db(0xae);
  db(0x00); db(0x0c); db(0x00); db(0x1c); db(0x2b); db(0x4d); db(0x00); db(0x2c);
  db(0x41); db(0xfa); db(0x01); db(0x60); db(0x2b); db(0x48); db(0x00); db(0x24);
  db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c);
- db(0xff); db(0x38); db(0x72); db(0x0f); db(0x61); db(0x00); db(0x07); db(0x40);
+ db(0xff); db(0x38); db(0x72); db(0x0f); db(0x61); db(0x00); db(0x08); db(0x0a);
  db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x00); db(0x66); db(0x1c);
  db(0x70); db(0x00); db(0x74); db(0x00); db(0x14); db(0x2d); db(0x00); db(0x4c);
  db(0x05); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae);
  db(0xfe); db(0x1e); db(0x60); db(0xe4); db(0x20); db(0x2d); db(0x00); db(0x00);
  db(0x67); db(0x00); db(0x00); db(0x76); db(0x72); db(0x01); db(0x4e); db(0xae);
  db(0xff); db(0x3a); db(0x2b); db(0x40); db(0x00); db(0x04); db(0x30); db(0x3c);
- db(0xff); db(0x38); db(0x72); db(0x0c); db(0x61); db(0x00); db(0x07); db(0x00);
+ db(0xff); db(0x38); db(0x72); db(0x0c); db(0x61); db(0x00); db(0x07); db(0xca);
  db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x40); db(0x4a); db(0xad);
  db(0x00); db(0x04); db(0x67); db(0x3a); db(0x39); db(0x7c); db(0x00); db(0x03);
  db(0x00); db(0x1c); db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac);
  db(0x00); db(0x28); db(0x20); db(0x02); db(0x51); db(0x80); db(0x29); db(0x40);
  db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38);
  db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0b); db(0x61); db(0x00);
- db(0x06); db(0x26); db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90);
+ db(0x06); db(0xf0); db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90);
  db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e);
  db(0x4a); db(0xac); db(0x00); db(0x20); db(0x67); db(0x00); db(0xfe); db(0xda);
  db(0x41); db(0xed); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28);
  db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xbc);
  db(0x2c); db(0x5f); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x2c); db(0x78);
  db(0x00); db(0x04); db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x38);
- db(0x72); db(0x11); db(0x61); db(0x00); db(0x05); db(0xba); db(0x4e); db(0x90);
+ db(0x72); db(0x11); db(0x61); db(0x00); db(0x06); db(0x84); db(0x4e); db(0x90);
  db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x38); db(0x74); db(0x00);
  db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e);
- db(0x43); db(0xfa); db(0x05); db(0xcc); db(0x4e); db(0xae); db(0xfe); db(0xec);
+ db(0x43); db(0xfa); db(0x06); db(0xaa); db(0x4e); db(0xae); db(0xfe); db(0xec);
  db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x43); db(0xfa);
  db(0x00); db(0x22); db(0x24); db(0x68); db(0xff); db(0xe4); db(0x21); db(0x49);
  db(0xff); db(0xe4); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x38);
- db(0x72); db(0x65); db(0x61); db(0x00); db(0x05); db(0x82); db(0x4e); db(0x90);
+ db(0x72); db(0x65); db(0x61); db(0x00); db(0x06); db(0x4c); db(0x4e); db(0x90);
  db(0x74); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x20); db(0x02);
  db(0x4e); db(0x75); db(0x59); db(0x8f); db(0x48); db(0xe7); db(0xc0); db(0x80);
  db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x66); db(0x61); db(0x00);
- db(0x05); db(0x66); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03);
+ db(0x06); db(0x30); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03);
  db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xfa);
- db(0x06); db(0x6a); db(0x43); db(0xfa); db(0x00); db(0x14); db(0x70); db(0x0f);
+ db(0x07); db(0x48); db(0x43); db(0xfa); db(0x00); db(0x14); db(0x70); db(0x0f);
  db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00);
  db(0xe6); db(0xda); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x10);
  db(0x00); db(0x00); db(0x00); db(0x00); db(0x2c); db(0x78); db(0x00); db(0x04);
- db(0x70); db(0x00); db(0x43); db(0xfa); db(0x06); db(0x53); db(0x4e); db(0xae);
+ db(0x70); db(0x00); db(0x43); db(0xfa); db(0x07); db(0x31); db(0x4e); db(0xae);
  db(0xfd); db(0xd8); db(0x72); db(0x02); db(0x30); db(0x3c); db(0xff); db(0x78);
- db(0x61); db(0x00); db(0x05); db(0x24); db(0x24); db(0x48); db(0x72); db(0x01);
+ db(0x61); db(0x00); db(0x05); db(0xee); db(0x24); db(0x48); db(0x72); db(0x01);
  db(0x4e); db(0x90); db(0x4a); db(0x81); db(0x67); db(0x0c); db(0x26); db(0x41);
  db(0x4e); db(0xae); db(0xfe); db(0x08); db(0x72); db(0x02); db(0x20); db(0x4b);
  db(0x4e); db(0x92); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0xbc); db(0xfc); db(0x00); db(0x00); db(0x67); db(0x06); db(0x4e); db(0xae);
  db(0xff); db(0x6a); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x3e);
  db(0x24); db(0x48); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa);
- db(0x05); db(0x4f); db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x2a); db(0x40);
+ db(0x06); db(0x2d); db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x2a); db(0x40);
  db(0x20); db(0x6d); db(0x00); db(0x22); db(0x20); db(0x28); db(0x00); db(0x18);
  db(0xe5); db(0x88); db(0x26); db(0x40); db(0x24); db(0xab); db(0x00); db(0x04);
  db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x04);
  db(0x20); db(0x40); db(0x41); db(0xe8); db(0x00); db(0x5c); db(0xe5); db(0x8a);
  db(0x22); db(0x42); db(0x22); db(0x51); db(0x4e); db(0xae); db(0xfe); db(0x92);
  db(0x22); db(0x02); db(0x43); db(0xfa); db(0x00); db(0x0e); db(0x30); db(0x3c);
- db(0xff); db(0x68); db(0x61); db(0x00); db(0x03); db(0xca); db(0x4e); db(0x90);
+ db(0xff); db(0x68); db(0x61); db(0x00); db(0x04); db(0x94); db(0x4e); db(0x90);
  db(0x4e); db(0xd0); db(0x70); db(0x30); db(0x60); db(0x0a); db(0x70); db(0x28);
  db(0x60); db(0x06); db(0x20); db(0x06); db(0x60); db(0x02); db(0x20); db(0x06);
  db(0x12); db(0xd8); db(0x53); db(0x80); db(0x6e); db(0xfa); db(0x4e); db(0x75);
  db(0x00); db(0x00); db(0x00); db(0x04); db(0x00); db(0x00); db(0x00); db(0x02);
  db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0xff); db(0xfc); db(0x61); db(0x00);
- db(0x03); db(0x8e); db(0x24); db(0x48); db(0x20); db(0x08); db(0x42); db(0x40);
+ db(0x04); db(0x68); db(0x24); db(0x48); db(0x20); db(0x08); db(0x42); db(0x40);
  db(0x20); db(0x40); db(0x21); db(0x4e); db(0x3f); db(0xfc); 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(0x05); db(0x14);
+ db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa); db(0x05); db(0xf2);
  db(0x23); db(0x48); db(0x00); db(0x0a); db(0x23); db(0x4a); db(0x00); db(0x0e);
  db(0x41); db(0xfa); db(0x01); db(0x30); db(0x23); db(0x48); db(0x00); db(0x12);
  db(0x33); db(0x7c); db(0x02); db(0x7a); db(0x00); db(0x08); db(0x70); db(0x0d);
  db(0x4e); db(0xae); db(0xff); db(0x58); db(0x4c); db(0xdf); db(0x44); db(0x00);
  db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x20); db(0x3c);
- db(0x00); db(0x00); db(0xf0); db(0x00); db(0x61); db(0x00); db(0x03); db(0x40);
+ db(0x00); db(0x00); db(0xf0); db(0x00); db(0x61); db(0x00); db(0x04); db(0x1a);
  db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x40); db(0x00);
- db(0x61); db(0x00); db(0x03); db(0x34); db(0x70); db(0x03); db(0x4a); db(0x69);
+ db(0x61); db(0x00); db(0x04); db(0x0e); db(0x70); db(0x03); db(0x4a); db(0x69);
  db(0x00); db(0x02); db(0x67); db(0x0e); db(0xd0); db(0xfc); db(0x20); db(0x00);
  db(0xd2); db(0xfc); db(0x00); db(0x08); db(0x51); db(0xc8); db(0xff); db(0xf0);
  db(0x60); db(0xd4); db(0x48); db(0xe8); db(0x00); db(0xfc); db(0x00); db(0x0c);
  db(0x0c); db(0x44); db(0x00); db(0x24); db(0x67); db(0x28); db(0x32); db(0x3c);
  db(0x00); db(0xb6); db(0x0c); db(0x44); db(0x00); db(0x26); db(0x67); db(0x1e);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0xff); db(0xf4); db(0x61); db(0x00);
- db(0x01); db(0x46); db(0x20); db(0x10); db(0x67); db(0x10); db(0x22); db(0x40);
+ db(0x02); db(0x20); db(0x20); db(0x10); db(0x67); db(0x10); db(0x22); db(0x40);
  db(0x20); db(0x3c); db(0x00); db(0x00); db(0x01); db(0x00); db(0x4e); db(0xae);
  db(0xfe); db(0xbc); db(0x70); db(0x01); db(0x60); db(0x10); db(0xd6); db(0xc1);
  db(0x4c); db(0xd4); db(0x07); db(0x00); db(0x4c); db(0xd4); db(0x00); db(0x07);
  db(0x00); db(0x0f); db(0xe0); db(0x4b); db(0xc6); db(0xfc); db(0x00); db(0x14);
  db(0xe5); db(0x4e); db(0xd6); db(0x46); db(0x2b); db(0x80); db(0x30); db(0x04);
  db(0xd8); db(0xfc); db(0x00); db(0x10); db(0x53); db(0x87); db(0x66); db(0xc2);
- db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x41); db(0xfa);
- db(0xdf); db(0x6c); db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff);
- db(0xd1); db(0xc0); 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(0x63); db(0x6f);
- db(0x6e); db(0x73); db(0x6f); db(0x6c); db(0x65); db(0x2e); db(0x64); db(0x65);
- db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56);
- db(0x53); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00);
- db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69);
- db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64);
- db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41);
- db(0x4d); db(0x3a); db(0x00); db(0x4e); db(0x49); db(0x4c); db(0x3a); db(0x00);
- db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72);
- db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65);
- db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x45); db(0x6e); db(0x76);
- db(0x2f); db(0x53); db(0x79); db(0x73); db(0x2f); db(0x50); db(0x6f); db(0x69);
- db(0x6e); db(0x74); db(0x65); db(0x72); db(0x2e); db(0x70); db(0x72); db(0x65);
- db(0x66); db(0x73); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x63);
- db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64);
- db(0x20); db(0x73); db(0x68); db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67);
- db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75);
- db(0x73); db(0x65); 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(0x68); db(0x65);
- db(0x61); db(0x72); db(0x74); db(0x20); db(0x62); db(0x65); db(0x61); db(0x74);
- db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); 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(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66);
- db(0x73); db(0x20); db(0x77); db(0x6f); db(0x72); db(0x6b); db(0x65); db(0x72);
- db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x74); db(0x72); db(0x61);
- db(0x70); db(0x20); db(0x77); db(0x6f); db(0x72); db(0x6b); db(0x65); db(0x72);
+ db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x2a); db(0x48);
+ db(0x7e); db(0x14); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae);
+ db(0xff); db(0x7c); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x61); db(0x00);
+ db(0x00); db(0xc8); db(0x24); db(0x0d); db(0x72); db(0x13); db(0x4e); db(0x90);
+ db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x98); db(0x26); db(0x40);
+ db(0x28); db(0x5b); db(0x20); db(0x4c); db(0x22); db(0x4d); db(0x30); db(0x3c);
+ db(0x3f); db(0xff); db(0x22); db(0xd8); db(0x51); db(0xc8); db(0xff); db(0xfc);
+ db(0x22); db(0x0d); db(0x92); db(0x8c); db(0x20); db(0x4b); db(0x70); db(0x00);
+ db(0x30); db(0x18); db(0x67); db(0x0e); db(0x43); db(0xf4); db(0x08); db(0x00);
+ db(0xd3); db(0x91); db(0x43); db(0xf5); db(0x08); db(0x00); db(0xd3); db(0x91);
+ db(0x60); db(0xec); db(0x70); db(0x00); db(0x20); db(0x18); db(0x67); db(0x06);
+ db(0x22); db(0x40); db(0xd3); db(0x91); db(0x60); db(0xf4); db(0x70); db(0x00);
+ db(0x61); db(0x00); db(0x00); db(0x7e); db(0x43); db(0xfa); db(0x00); db(0x7a);
+ db(0x93); db(0xc8); db(0xd3); db(0xcd); db(0x32); db(0xfc); db(0x41); db(0xf9);
+ db(0x22); db(0xcc); db(0x32); db(0xfc); db(0x02); db(0x80); db(0x22); db(0xfc);
+ db(0x00); db(0x00); db(0xff); db(0xff); db(0x22); db(0xbc); db(0xd1); db(0xc0);
+ db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x00); db(0x40); db(0x70); db(0x00);
+ db(0x30); db(0x18); db(0x67); db(0x14); db(0x06); db(0x40); db(0x00); db(0x0c);
+ db(0x43); db(0xf4); db(0x08); db(0x00); db(0x32); db(0xfc); db(0x4e); db(0xf9);
+ db(0x45); db(0xf5); db(0x08); db(0x00); db(0x22); db(0x8a); db(0x60); db(0xe6);
+ db(0x0c); db(0x6e); db(0x00); db(0x24); db(0x00); db(0x14); db(0x65); db(0x04);
+ db(0x4e); db(0xae); db(0xfd); db(0x84); db(0x30); db(0x3c); db(0xff); db(0x38);
+ db(0x61); db(0x00); db(0x00); db(0x2e); db(0x24); db(0x0d); db(0x72); db(0x14);
+ db(0x4e); db(0x90); db(0x7e); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76);
+ db(0x20); db(0x07); db(0x4e); db(0x75); db(0x0e); db(0x90); db(0x13); db(0x82);
+ db(0x05); db(0x58); db(0x02); db(0xa0); db(0x03); db(0x26); db(0x00); db(0x00);
+ db(0x41); db(0xfa); db(0xde); db(0xa2); 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(0x41); db(0xfa); db(0xde); db(0x92); db(0x02); db(0x80); db(0x00); db(0x00);
+ db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x4e); db(0x71);
+ db(0x4e); db(0x71); 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(0x63); db(0x6f); db(0x6e); db(0x73);
+ db(0x6f); db(0x6c); db(0x65); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69);
+ db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x00);
+ db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00); db(0x44); db(0x45);
+ db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62);
+ db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76);
+ db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a);
+ db(0x00); db(0x4e); db(0x49); db(0x4c); db(0x3a); db(0x00); db(0x63); db(0x6c);
+ db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e);
+ db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52);
+ db(0x41); db(0x4d); db(0x3a); db(0x45); db(0x6e); db(0x76); db(0x2f); db(0x53);
+ db(0x79); db(0x73); db(0x2f); db(0x50); db(0x6f); db(0x69); db(0x6e); db(0x74);
+ db(0x65); db(0x72); db(0x2e); db(0x70); db(0x72); db(0x65); db(0x66); db(0x73);
+ db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x63); db(0x6c); db(0x69);
+ db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x20); db(0x73);
+ db(0x68); db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67); db(0x00); db(0x55);
+ db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65);
+ 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(0x68); db(0x65); db(0x61); db(0x72);
+ db(0x74); db(0x20); db(0x62); db(0x65); db(0x61); db(0x74); db(0x00); db(0x55);
+ db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); 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(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(0x55); db(0x41); db(0x45); db(0x20); db(0x64); db(0x65);
- db(0x62); db(0x75); db(0x67); db(0x67); db(0x65); db(0x72); 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(0x6d); db(0x65); db(0x67); db(0x61);
- db(0x63); db(0x68); db(0x69); db(0x70); db(0x20); db(0x6d); db(0x65); db(0x6d);
- db(0x6f); db(0x72); db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65);
- db(0x20); db(0x53); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00);
- db(0x55); db(0x41); db(0x45); db(0x20); db(0x73); db(0x68); db(0x65); db(0x6c);
- db(0x6c); db(0x20); db(0x65); db(0x78); db(0x65); db(0x63); db(0x75); db(0x74);
- db(0x65); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x62); db(0x6f);
- db(0x61); db(0x72); db(0x64); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2);
+ db(0x77); db(0x6f); db(0x72); db(0x6b); db(0x65); db(0x72); db(0x00); db(0x55);
+ db(0x41); db(0x45); db(0x20); db(0x74); db(0x72); db(0x61); db(0x70); db(0x20);
+ db(0x77); db(0x6f); db(0x72); db(0x6b); 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(0x55); db(0x41); db(0x45); db(0x20); db(0x64); db(0x65); db(0x62); db(0x75);
+ db(0x67); db(0x67); db(0x65); db(0x72); 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(0x6d); db(0x65); db(0x67); db(0x61); db(0x63); db(0x68);
+ db(0x69); db(0x70); db(0x20); db(0x6d); db(0x65); db(0x6d); db(0x6f); db(0x72);
+ db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x20); db(0x53);
+ db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41);
+ db(0x45); db(0x20); db(0x73); db(0x68); db(0x65); db(0x6c); db(0x6c); db(0x20);
+ db(0x65); db(0x78); db(0x65); db(0x63); db(0x75); db(0x74); db(0x65); db(0x00);
+ db(0x55); db(0x41); db(0x45); db(0x20); db(0x62); db(0x6f); db(0x61); db(0x72);
+ db(0x64); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2);
 
diff --git a/ide.cpp b/ide.cpp
index b8a32d767f7bf3594ebae9f85752c4e39a5dd563..39d1d528f45468af48bfd0c4907226f4ac9d2c29 100644 (file)
--- a/ide.cpp
+++ b/ide.cpp
@@ -6,7 +6,7 @@
 * (c) 2006 - 2015 Toni Wilen
 */
 
-#define IDE_LOG 2
+#define IDE_LOG 1
 
 #include "sysconfig.h"
 #include "sysdeps.h"
index 3fc10fc8539544643ac5b09b5b1283ba47c4fd67..b487678840d613758e95011c7ae569f196375523 100644 (file)
@@ -70,6 +70,9 @@ extern void calltrap (uae_u32);
 extern void org (uae_u32);
 extern uae_u32 here (void);
 extern uaecptr makedatatable (uaecptr resid, uaecptr resname, uae_u8 type, uae_s8 priority, uae_u16 ver, uae_u16 rev);
+extern uae_u32 boot_rom_copy(TrapContext*, uaecptr, int);
+extern void add_rom_absolute(uaecptr addr);
+extern void save_rom_absolute(uaecptr addr);
 
 extern void align (int);
 
index 82164fbea0d2352d9040f480a49d3a9c350b331e..2bd97225828e72bdf49d8781d315e2e6ad842b9f 100644 (file)
 #define KBLED_CAPSLOCKM (1 << KBLED_CAPSLOCKB)
 #define KBLED_SCROLLLOCKM (1 << KBLED_SCROLLLOCKB)
 
-enum aks { AKS_ENTERGUI = 0x200, AKS_SCREENSHOT_FILE, AKS_SCREENSHOT_CLIPBOARD, AKS_FREEZEBUTTON,
+enum aks { AKS_ENTERGUI = 0x200,
+       AKS_SCREENSHOT_FILE,
+       AKS_SCREENSHOT_CLIPBOARD,
+       AKS_FREEZEBUTTON,
     AKS_FLOPPY0, AKS_FLOPPY1, AKS_FLOPPY2, AKS_FLOPPY3,
     AKS_EFLOPPY0, AKS_EFLOPPY1, AKS_EFLOPPY2, AKS_EFLOPPY3,
        AKS_TOGGLEDEFAULTSCREEN,
index 568b8db94a559f1d609ab67cde747d3b5aa1135d..2e23b00ae6a87c932c37aaba63b24efcfe8de15c 100644 (file)
@@ -42,6 +42,7 @@ void uae_ppc_free(void);
 void uae_ppc_hsync_handler(void);
 void uae_ppc_wakeup(void);
 void ppc_map_banks(uae_u32, uae_u32, const TCHAR*, void*, bool);
+void ppc_remap_bank(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr);
 bool uae_self_is_ppc(void);
 void uae_ppc_wakeup_main(void);
 
index a0ccb6c8ffee2df240abbc5a9ce7c86bcda8ab99..36a8c9d42b6ec9155c6b21a47d6a203e87fc94c4 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -160,14 +160,21 @@ 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_apmode[1].gfx_vsync)
+       if (prefs->gfx_apmode[1].gfx_vsync > 0)
                prefs->gfx_apmode[1].gfx_vsyncmode = 1;
 
        for (int i = 0; i < 2; i++) {
                struct apmode *ap = &prefs->gfx_apmode[i];
                ap->gfx_vflip = 0;
                ap->gfx_strobo = false;
-               if (ap->gfx_vsync) {
+               if (ap->gfx_vsync < 0) {
+                       // adaptive sync
+                       ap->gfx_vsyncmode = 0;
+                       ap->gfx_vflip = 0;
+                       if (ap->gfx_backbuffers >= 2)
+                               ap->gfx_backbuffers = 1;
+                       ap->gfx_strobo = prefs->lightboost_strobo;
+               } else if (ap->gfx_vsync > 0) {
                        if (ap->gfx_vsyncmode) {
                                // low latency vsync: no flip only if no-buffer
                                if (ap->gfx_backbuffers >= 1)
@@ -569,7 +576,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig)
        }
        for (int i = 0; i < MAX_RTG_BOARDS; i++) {
                if ((p->rtgboards[i].rtgmem_size > 0 && p->rtgboards[i].rtgmem_type == GFXBOARD_UAE_Z3) && p->address_space_24) {
-                       error_log (_T("UAEGFX RTG can't be used if address space is 24-bit."));
+                       error_log (_T("UAEGFX Z3 RTG can't be used if address space is 24-bit."));
                        p->rtgboards[i].rtgmem_size = 0;
                        err = 1;
                }
@@ -582,6 +589,10 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig)
                err = 1;
        }
 #endif
+       if (p->socket_emu && p->uaeboard >= 3) {
+               write_log(_T("bsdsocket.library is not compatible with indirect UAE Boot ROM.\n"));
+               p->socket_emu = 0;
+       }
 
        if (p->nr_floppies < 0 || p->nr_floppies > 4) {
                error_log (_T("Invalid number of floppies.  Using 2."));
index dd0f9f154b44e1ab9baa93610557e4e0882ae745..3172bcbe824a30bc5ff16373126b80691f10a7b7 100644 (file)
@@ -4588,7 +4588,8 @@ static uae_u32 REGPARAM2 picasso_SetMemoryMode(TrapContext *ctx)
 
 #define PUTABI(func) \
        if (ABI) \
-               trap_put_long(ctx, ABI + func, here ());
+               trap_put_long(ctx, ABI + func, here ()); \
+               save_rom_absolute(ABI + func);
 
 #define RTGCALL(func,funcdef,call) \
        PUTABI (func); \
@@ -4620,11 +4621,12 @@ static uae_u32 REGPARAM2 picasso_SetMemoryMode(TrapContext *ctx)
 
 #define RTGNONE(func) \
        if (ABI) \
-               trap_put_long(ctx, ABI + func, start);
+               trap_put_long(ctx, ABI + func, start); \
+               save_rom_absolute(ABI + func);
 
 static void inituaegfxfuncs(TrapContext *ctx, uaecptr start, uaecptr ABI)
 {
-       if (uaegfx_old)
+       if (uaegfx_old || !ABI)
                return;
        org (start);
 
index 3ff72313402e5a8609063f7ddfd9232b91d39526..045c50876586e6b63e019392f7239ac3e7b71ed1 100644 (file)
 #define IDS_NUMSG_NO_PPC                404
 #define IDS_NUMSG_UAEBOOTROM_PCC        405
 #define IDS_AUTOSCALE_OVERSCAN_BLANK    408
+#define IDS_SCREEN_ADAPTIVE_SYNC        409
 #define IDS_QS_MODELS                   1000
 #define IDS_QS_MODEL_A500               1001
 #define IDS_QS_MODEL_A500P              1002
index 4d57387e2dd5b278d13c1a32c25868f2253ecd20..82b7c7bb33c36abcc683969d321ca22d214a459e 100644 (file)
@@ -2036,6 +2036,7 @@ BEGIN
     IDS_NUMSG_UAEBOOTROM_PCC 
                             "PPC native OS booted with incompatible UAE boot ROM enabled.\nSelect ROM panel ""New UAE (128k, ROM, Indirect)"" option\nor disable all UAE expansions.\n"
     IDS_AUTOSCALE_OVERSCAN_BLANK "Overscan blanking"
+    IDS_SCREEN_ADAPTIVE_SYNC "Adaptive Sync"
 END
 
 #endif    // English resources
index 9882a07074553bb537e3514ebedc6b35c02e7928..9fcb47e24903362712bdd6c8d22de918437678f0 100644 (file)
 #define LANG_DLL_FULL_VERSION_MATCH 1
 
 #if WINUAEPUBLICBETA
-#define WINUAEBETA _T("9")
+#define WINUAEBETA _T("10")
 #else
 #define WINUAEBETA _T("")
 #endif
 
-#define WINUAEDATE MAKEBD(2016, 3, 19)
+#define WINUAEDATE MAKEBD(2016, 4, 9)
 
 //#define WINUAEEXTRA _T("AmiKit Preview")
 //#define WINUAEEXTRA _T("Amiga Forever Edition")
index e9076d7fda6861dbb32047735dfd0989c52afbb7..b70f8810259d323f75d82b88beff2b7063122552 100644 (file)
@@ -561,9 +561,9 @@ void getfilterrect2 (RECT *sr, RECT *dr, RECT *zr, int dst_width, int dst_height
                        OffsetRect (zr, 0, (int)(-filter_vert_offset * ahs));
 
                        diff = dr->right - dr->left;
-                       filterxmult = diff / (dst_width * scale);
+                       filterxmult = diff / ((float)dst_width * scale);
                        diff = dr->bottom - dr->top;
-                       filterymult = diff / (dst_height * scale);
+                       filterymult = diff / ((float)dst_height * scale);
                        goto end;
                }
 
index 95c331cd6104e1d41b477d25374fd3033839552a..86a723729fa2b8e6a83ce7d11747a445930ba2e3 100644 (file)
@@ -1106,7 +1106,7 @@ bool render_screen (bool immediate)
        }
        flushymin = 0;
        flushymax = currentmode->amiga_height;
-       EnterCriticalSection (&screen_cs);
+       gfx_lock();
        if (currentmode->flags & DM_D3D) {
                v = D3D_renderframe (immediate);
        } else if (currentmode->flags & DM_SWSCALE) {
@@ -1116,7 +1116,7 @@ bool render_screen (bool immediate)
                v = true;
        }
        render_ok = v;
-       LeaveCriticalSection (&screen_cs);
+       gfx_unlock();
        return render_ok;
 }
 
@@ -1139,7 +1139,7 @@ static void doflipevent (int mode)
 bool show_screen_maybe (bool show)
 {
        struct apmode *ap = picasso_on ? &currprefs.gfx_apmode[1] : &currprefs.gfx_apmode[0];
-       if (!ap->gfx_vflip || ap->gfx_vsyncmode == 0 || !ap->gfx_vsync) {
+       if (!ap->gfx_vflip || ap->gfx_vsyncmode == 0 || ap->gfx_vsync <= 0) {
                if (show)
                        show_screen (0);
                return false;
@@ -1155,30 +1155,59 @@ bool show_screen_maybe (bool show)
 
 void show_screen_special (void)
 {
-       EnterCriticalSection (&screen_cs);
        if (currentmode->flags & DM_D3D) {
+               gfx_lock();
                D3D_showframe_special (1);
+               gfx_unlock();
        }
-       LeaveCriticalSection (&screen_cs);
+}
+static frame_time_t strobo_time;
+
+static void CALLBACK blackinsertion_cb(
+       UINT      uTimerID,
+       UINT      uMsg,
+       DWORD_PTR dwUser,
+       DWORD_PTR dw1,
+       DWORD_PTR dw2
+       )
+{
+       if (!screen_is_initialized)
+               return;
+       for (;;) {
+               frame_time_t ct = read_processor_time();
+               if ((int)strobo_time - (int)ct <= 0 || (int)strobo_time - (int)ct > vsynctimebase / 2) {
+                       break;
+               }
+       }
+       if (!screen_is_initialized)
+               return;
+       show_screen_special();
 }
 
+
 void show_screen (int mode)
 {
-       EnterCriticalSection (&screen_cs);
+       gfx_lock();
        if (mode == 2) {
                if (currentmode->flags & DM_D3D) {
                        D3D_showframe_special (1);
                }
-               LeaveCriticalSection (&screen_cs);
+               gfx_unlock();
                return;
        }
        if (!render_ok) {
-               LeaveCriticalSection (&screen_cs);
+               gfx_unlock();
                return;
        }
        if (currentmode->flags & DM_D3D) {
-               D3D_showframe ();
-
+               struct apmode *ap = picasso_on ? &currprefs.gfx_apmode[1] : &currprefs.gfx_apmode[0];
+               if (isfullscreen() > 0 && isvsync() == 0 && ap->gfx_strobo && ap->gfx_refreshrate > 80) {
+               //if (isvsync() == 0 && ap->gfx_strobo) {
+                       int ms = (int)((1000 / 2) / vblank_hz) - 1;
+                       strobo_time = read_processor_time() + vsynctimebase / 2;
+                       timeSetEvent(ms, 0, blackinsertion_cb, NULL, TIME_ONESHOT | TIME_CALLBACK_FUNCTION);
+               }
+               D3D_showframe();
 #ifdef GFXFILTER
        } else if (currentmode->flags & DM_SWSCALE) {
                if (!dx_islost () && !picasso_on)
@@ -1188,7 +1217,7 @@ void show_screen (int mode)
                if (!dx_islost () && !picasso_on)
                        DirectDraw_Flip (1);
        }
-       LeaveCriticalSection (&screen_cs);
+       gfx_unlock();
        render_ok = false;
 }
 
@@ -1440,10 +1469,10 @@ uae_u8 *gfx_lock_picasso (bool fullupdate, bool doclear)
        if (rtg_locked) {
                return p;
        }
-       EnterCriticalSection (&screen_cs);
+       gfx_lock();
        p = gfx_lock_picasso2 (fullupdate);
        if (!p) {
-               LeaveCriticalSection (&screen_cs);
+               gfx_unlock();
        } else {
                rtg_locked = true;
                if (doclear) {
@@ -1460,7 +1489,7 @@ uae_u8 *gfx_lock_picasso (bool fullupdate, bool doclear)
 void gfx_unlock_picasso (bool dorender)
 {
        if (!rtg_locked)
-               EnterCriticalSection (&screen_cs);
+               gfx_lock();
        rtg_locked = false;
        if (currprefs.gfx_api) {
                if (dorender) {
@@ -1472,14 +1501,14 @@ void gfx_unlock_picasso (bool dorender)
                D3D_unlocktexture ();
                if (dorender) {
                        if (D3D_renderframe (false)) {
-                               LeaveCriticalSection (&screen_cs);
+                               gfx_unlock();
                                render_ok = true;
                                show_screen_maybe (true);
                        } else {
-                               LeaveCriticalSection (&screen_cs);
+                               gfx_unlock();
                        }
                } else {
-                       LeaveCriticalSection (&screen_cs);
+                       gfx_unlock();
                }
        } else {
                DirectDraw_SurfaceUnlock ();
@@ -1491,7 +1520,7 @@ void gfx_unlock_picasso (bool dorender)
                                p96_double_buffer_needs_flushing = 0;
                        }
                }
-               LeaveCriticalSection (&screen_cs);
+               gfx_unlock();
        }
 }
 
@@ -1730,6 +1759,7 @@ static int open_windows (bool mousecapture)
 
        changevblankthreadmode (VBLANKTH_IDLE);
 
+       screen_is_initialized = 0;
        inputdevice_unacquire ();
        wait_keyrelease ();
        reset_sound ();
@@ -1737,7 +1767,9 @@ static int open_windows (bool mousecapture)
 
        updatewinfsmode (&currprefs);
 #ifdef D3D
+       gfx_lock();
        D3D_free (false);
+       gfx_unlock();
 #endif
 #ifdef OPENGL
        OGL_free ();
index d4251c51a42a5d0f4446ae235bfba8539c8d4685..7e6e1b5b1679508dfcbcb8a35b92e71fbc90c38e 100644 (file)
@@ -6824,13 +6824,20 @@ static void values_to_displaydlg (HWND hDlg)
        SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_ADDSTRING, 0, (LPARAM)buffer);
        WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC, buffer, sizeof buffer / sizeof (TCHAR));
        SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_ADDSTRING, 0, (LPARAM)buffer);
-       WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC_AUTOSWITCH, buffer, sizeof buffer / sizeof (TCHAR));
+       WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC_AUTOSWITCH, buffer, sizeof buffer / sizeof(TCHAR));
        SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_ADDSTRING, 0, (LPARAM)buffer);
+       WIN32GUI_LoadUIString(IDS_SCREEN_ADAPTIVE_SYNC, buffer, sizeof buffer / sizeof(TCHAR));
+       SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_ADDSTRING, 0, (LPARAM)buffer);      
 
        SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE, CB_SETCURSEL,
                workprefs.gfx_apmode[0].gfx_fullscreen, 0);
-       SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_SETCURSEL,
-               workprefs.gfx_apmode[0].gfx_vsync + (workprefs.gfx_apmode[0].gfx_vsyncmode || !workprefs.gfx_apmode[0].gfx_vsync ? 0 : 2), 0);
+       v = workprefs.gfx_apmode[0].gfx_vsync;
+       if (v < 0)
+               v = 5;
+       else if (v > 0) {
+               v = v + (workprefs.gfx_apmode[0].gfx_vsyncmode || !v ? 0 : 2);
+       }
+       SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_SETCURSEL, v, 0);
 
        SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG, CB_RESETCONTENT, 0, 0);
        SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_RESETCONTENT, 0, 0);
@@ -6851,14 +6858,20 @@ static void values_to_displaydlg (HWND hDlg)
 #endif
        WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC2, buffer, sizeof buffer / sizeof (TCHAR));
        SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_ADDSTRING, 0, (LPARAM)buffer);
+       WIN32GUI_LoadUIString(IDS_SCREEN_ADAPTIVE_SYNC, buffer, sizeof buffer / sizeof(TCHAR));
+       SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_ADDSTRING, 0, (LPARAM)buffer);
 #if 0
        WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC2_AUTOSWITCH, buffer, sizeof buffer / sizeof (TCHAR));
        SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_ADDSTRING, 0, (LPARAM)buffer);
 #endif
        SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG, CB_SETCURSEL,
                workprefs.gfx_apmode[1].gfx_fullscreen, 0);
-       SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_SETCURSEL,
-               workprefs.gfx_apmode[1].gfx_vsync, 0);
+       v = workprefs.gfx_apmode[1].gfx_vsync;
+       if (v < 0)
+               v = 2;
+       else if (v > 0)
+               v = 1;
+       SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_SETCURSEL, v, 0);
 
        SendDlgItemMessage(hDlg, IDC_LORES, CB_RESETCONTENT, 0, 0);
        WIN32GUI_LoadUIString(IDS_RES_LORES, buffer, sizeof buffer / sizeof (TCHAR));
@@ -7053,20 +7066,33 @@ static void values_from_displaydlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l
        int oldvs = workprefs.gfx_apmode[0].gfx_vsync;
        workprefs.gfx_apmode[0].gfx_vsync = 0;
        workprefs.gfx_apmode[0].gfx_vsyncmode = 0;
-       if (i > 0) {
-               i--;
-               workprefs.gfx_apmode[0].gfx_vsync = (i & 1) + 1;
-               workprefs.gfx_apmode[0].gfx_vsyncmode = (i < 2) ? 1 : 0;
+       if (i == 1) {
+               workprefs.gfx_apmode[0].gfx_vsync = 1;
+               workprefs.gfx_apmode[0].gfx_vsyncmode = 1;
+       } else if (i == 2) {
+               workprefs.gfx_apmode[0].gfx_vsync = 2;
+               workprefs.gfx_apmode[0].gfx_vsyncmode = 1;
+       } else if (i == 3) {
+               workprefs.gfx_apmode[0].gfx_vsync = 1;
+               workprefs.gfx_apmode[0].gfx_vsyncmode = 0;
+       } else if (i == 4) {
+               workprefs.gfx_apmode[0].gfx_vsync = 2;
+               workprefs.gfx_apmode[0].gfx_vsyncmode = 0;
+       } else if (i == 5) {
+               workprefs.gfx_apmode[0].gfx_vsync = -1;
+               workprefs.gfx_apmode[0].gfx_vsyncmode = 0;
        }
 
        workprefs.gfx_apmode[1].gfx_fullscreen = SendDlgItemMessage (hDlg, IDC_SCREENMODE_RTG, CB_GETCURSEL, 0, 0);
        i = SendDlgItemMessage (hDlg, IDC_SCREENMODE_RTG2, CB_GETCURSEL, 0, 0);
        workprefs.gfx_apmode[1].gfx_vsync = 0;
        workprefs.gfx_apmode[1].gfx_vsyncmode = 0;
-       if (i > 0) {
-               i--;
-               workprefs.gfx_apmode[1].gfx_vsync = (i & 1) + 1;
+       if (i == 1) {
+               workprefs.gfx_apmode[1].gfx_vsync = 1;
                workprefs.gfx_apmode[1].gfx_vsyncmode = 1;
+       } else if (i == 2) {
+               workprefs.gfx_apmode[1].gfx_vsync = -1;
+               workprefs.gfx_apmode[1].gfx_vsyncmode = 0;
        }
        
        bool updaterate = false, updateslider = false;
index f51adc08e0fad3198e2e6af44d1649cde65cf6c5..f262f8326b59cd3cfdfc1ee1159573c042ee62cb 100644 (file)
@@ -1,4 +1,20 @@
 
+Beta 10:
+
+- if uaenet.device is online and packet(s) have arrived but there is no pending CMD_READ/CMD_READORPHANs:
+  wait about 2s before dropping it, it is possible that multiple packets will arrive so quickly that Amiga-side
+  TCP/IP stack don't have time to queue more read commands before packets get dropped.
+- uaenet.device stability fix.
+- Loading config with unplugged joystick or mouse inserted in either port: previous device was not autoselected.
+- Filter panel scaling mode active and mouse driver enabled: mouse got stuck in a corner in some situations.
+- Screenshot input event set to toggle-mode in Input panel: key/button press = create screenshots continuously
+  every frame, following key/button press = stop automatic screenshots.
+- one genlinetoscr function (16-bit 4x horizontal stretch) used genlock function in non-genlock mode.
+- Adaptive Sync "vsync" mode added. Optimal setting designed for G-Sync/FreeSync monitors. Also allows 100/120Hz
+  black frame insertion mode. Not very stable yet. (Don't try to use without adaptive sync hardware..)
+- 68040 MMU mode SR M-bit handling was missing. 68060 SR M-bit handling was not correct.
+- Disable bsdsocket.library if indirect UAE Boot ROM is enabled, it is not (yet?) compatible.
+
 Beta 9:
 
 - Fixed swapped audio channels if stereo separation was set (b1 cleanup missed code path)
index fd32188edba9aa336d226ec6cc538f5cb0024ab8..fb3df8aa0f0657e7d5ff3e0a547ec85bfa129713 100644 (file)
@@ -463,21 +463,21 @@ void uae_ppc_wakeup_main(void)
        }
 }
 
-static void ppc_map_region(PPCMemoryRegion *r)
+static void ppc_map_region(PPCMemoryRegion *r, bool dolock)
 {
-       if (impl.in_cpu_thread() == false) {
+       if (dolock && impl.in_cpu_thread() == false) {
                /* map_memory will acquire the qemu global lock, so we must ensure
                * the PPC CPU can finish any I/O requests and release the lock. */
                uae_ppc_spinlock_release();
        }
        impl.map_memory(r, -1);
-       if (impl.in_cpu_thread() == false) {
+       if (dolock && impl.in_cpu_thread() == false) {
                uae_ppc_spinlock_get();
        }
        free((void*)r->name);
 }
 
-void ppc_map_banks(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, bool remove)
+static void ppc_map_banks2(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, bool remove, bool direct, bool dolock)
 {
        if (ppc_state == PPC_STATE_INACTIVE || !impl.map_memory)
                return;
@@ -489,29 +489,49 @@ void ppc_map_banks(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, b
        r.alias = remove ? 0xffffffff : 0;
        r.memory = addr;
 
-       if (r.start == rtarea_base && rtarea_base) {
+       if (r.start == rtarea_base && rtarea_base && direct) {
                // Map first half directly, it contains code only.
                // Second half has dynamic data, it must not be direct mapped.
                r.memory = rtarea_bank.baseaddr;
                r.size = RTAREA_DATAREGION;
-               ppc_map_region(&r);
+               ppc_map_region(&r, dolock);
                r.start = start + RTAREA_DATAREGION;
                r.size = size - RTAREA_DATAREGION;
                r.name = ua(name);
                r.alias = remove ? 0xffffffff : 0;
                r.memory = NULL;
-       } else if (r.start == uaeboard_base && uaeboard_base) {
+       } else if (r.start == uaeboard_base && uaeboard_base && direct) {
                // Opposite here, first half indirect, second half direct.
                r.memory = NULL;
                r.size = UAEBOARD_DATAREGION_START;
-               ppc_map_region(&r);
+               ppc_map_region(&r, dolock);
                r.start = start + UAEBOARD_DATAREGION_START;
                r.size = UAEBOARD_DATAREGION_SIZE;
                r.name = ua(name);
                r.alias = remove ? 0xffffffff : 0;
                r.memory = uaeboard_bank.baseaddr + UAEBOARD_DATAREGION_START;
        }
-       ppc_map_region(&r);
+       ppc_map_region(&r, dolock);
+}
+void ppc_map_banks(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, bool remove)
+{
+       ppc_map_banks2(start, size, name, addr, remove, true, true);
+}
+
+void ppc_remap_bank(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr)
+{
+       if (ppc_state == PPC_STATE_INACTIVE || !impl.map_memory)
+               return;
+
+       if (impl.in_cpu_thread() == false) {
+               uae_ppc_spinlock_release();
+       }
+       ppc_map_banks2(start, size, name, addr, true, false, false);
+       ppc_map_banks2(start, size, name, addr, false, true, false);
+       if (impl.in_cpu_thread() == false) {
+               uae_ppc_spinlock_get();
+       }
+
 }
 
 void uae_ppc_get_model(const TCHAR **model, uint32_t *hid1)
index bc85f001b89fc4ec7ef91267b2038fde09795f62..0ba66c631edf6f22944699b770753bbc65f0f89f 100644 (file)
--- a/traps.cpp
+++ b/traps.cpp
@@ -306,6 +306,216 @@ static void *trap_thread (void *arg)
        return 0;
 }
 
+
+/*
+* Set up extended trap context and call handler function
+*/
+static void trap_HandleExtendedTrap(TrapHandler handler_func, int has_retval)
+{
+       struct TrapContext *context = xcalloc(TrapContext, 1);
+
+       if (context) {
+               uae_sem_init(&context->switch_to_trap_sem, 0, 0);
+               uae_sem_init(&context->switch_to_emu_sem, 0, 0);
+
+               context->trap_handler = handler_func;
+               context->trap_has_retval = has_retval;
+
+               //context->saved_regs = regs;
+               copytocpucontext(&context->saved_regs);
+
+               /* Start thread to handle new trap context. */
+               uae_start_thread_fast(trap_thread, (void *)context, &context->thread);
+
+               /* Switch to trap context to begin execution of
+               * trap handler function.
+               */
+               uae_sem_post(&context->switch_to_trap_sem);
+
+               /* Wait for trap context to switch back to us.
+               *
+               * It'll do this when the trap handler is done - or when
+               * the handler wants to call 68k code. */
+               uae_sem_wait(&context->switch_to_emu_sem);
+       }
+}
+
+/*
+* Call m68k function from an extended trap handler
+*
+* This function is to be called from the trap context.
+*/
+
+static uae_u32 call_hardware_trap_back(TrapContext *ctx, uae_u16 cmd, uae_u32 p1, uae_u32 p2, uae_u32 p3, uae_u32 p4);
+
+static uae_u32 trap_Call68k(TrapContext *ctx, uaecptr func_addr)
+{
+       if (ctx->host_trap_data) {
+
+               return call_hardware_trap_back(ctx, 10, func_addr, 0, 0, 0);
+
+       } else {
+
+               /* Enter critical section - only one trap at a time, please! */
+               uae_sem_wait(&trap_mutex);
+               current_context = ctx;
+
+               /* Don't allow an interrupt and thus potentially another
+               * trap to be invoked while we hold the above mutex.
+               * This is probably just being paranoid. */
+               regs.intmask = 7;
+
+               /* Set up function call address. */
+               ctx->call68k_func_addr = func_addr;
+
+               /* Set PC to address of 68k call trap, so that it will be
+               * executed when emulator context resumes. */
+               m68k_setpc(m68k_call_trapaddr);
+               fill_prefetch();
+
+               /* Switch to emulator context. */
+               uae_sem_post(&ctx->switch_to_emu_sem);
+
+               /* Wait for 68k call return handler to switch back to us. */
+               uae_sem_wait(&ctx->switch_to_trap_sem);
+
+               /* End critical section. */
+               uae_sem_post(&trap_mutex);
+
+               /* Get return value from 68k function called. */
+               return ctx->call68k_retval;
+       }
+}
+
+/*
+* Handles the emulator's side of a 68k call (from an extended trap)
+*/
+static uae_u32 REGPARAM2 m68k_call_handler(TrapContext *dummy_ctx)
+{
+       TrapContext *context = current_context;
+
+       uae_u32 sp;
+
+       sp = m68k_areg(regs, 7);
+
+       /* Push address of trap context on 68k stack. This is
+       * so the return trap can find this context. */
+       sp -= sizeof(void *);
+       put_pointer(sp, context);
+
+       /* Push addr to return handler trap on 68k stack.
+       * When the called m68k function does an RTS, the CPU will pull this
+       * address off the stack and so call the return handler. */
+       sp -= 4;
+       put_long(sp, m68k_return_trapaddr);
+
+       m68k_areg(regs, 7) = sp;
+
+       /* Set PC to address of 68k function to call. */
+       m68k_setpc(context->call68k_func_addr);
+       fill_prefetch();
+
+       /* End critical section: allow other traps run. */
+       uae_sem_post(&trap_mutex);
+
+       /* Restore interrupts. */
+       regs.intmask = context->saved_regs.intmask;
+
+       /* Dummy return value. */
+       return 0;
+}
+
+/*
+* Handles the return from a 68k call at the emulator's side.
+*/
+static uae_u32 REGPARAM2 m68k_return_handler(TrapContext *dummy_ctx)
+{
+       TrapContext *context;
+       uae_u32 sp;
+
+       /* One trap returning at a time, please! */
+       uae_sem_wait(&trap_mutex);
+
+       /* Get trap context from 68k stack. */
+       sp = m68k_areg(regs, 7);
+       context = (TrapContext *)get_pointer(sp);
+       sp += sizeof(void *);
+       m68k_areg(regs, 7) = sp;
+
+       /* Get return value from the 68k call. */
+       context->call68k_retval = m68k_dreg(regs, 0);
+
+       /* Switch back to trap context. */
+       uae_sem_post(&context->switch_to_trap_sem);
+
+       /* Wait for trap context to switch back to us.
+       *
+       * It'll do this when the trap handler is done - or when
+       * the handler wants to call another 68k function. */
+       uae_sem_wait(&context->switch_to_emu_sem);
+
+       /* Dummy return value. */
+       return 0;
+}
+
+/*
+* Handles completion of an extended trap and passes
+* return value from trap function to 68k space.
+*/
+static uae_u32 REGPARAM2 exit_trap_handler(TrapContext *dummy_ctx)
+{
+       TrapContext *context = current_context;
+
+       /* Wait for trap context thread to exit. */
+       uae_wait_thread(context->thread);
+
+       /* Restore 68k state saved at trap entry. */
+       //regs = context->saved_regs;
+       copyfromcpucontext(&context->saved_regs, context->saved_regs.pc);
+
+       /* If trap is supposed to return a value, then store
+       * return value in D0. */
+       if (context->trap_has_retval)
+               m68k_dreg(regs, 0) = context->trap_retval;
+
+       uae_sem_destroy(&context->switch_to_trap_sem);
+       uae_sem_destroy(&context->switch_to_emu_sem);
+
+       xfree(context);
+
+       /* End critical section */
+       uae_sem_post(&trap_mutex);
+
+       /* Dummy return value. */
+       return 0;
+}
+
+
+
+/*
+* Call a 68k library function from extended trap.
+*/
+uae_u32 CallLib(TrapContext *ctx, uaecptr base, uae_s16 offset)
+{
+       uae_u32 retval;
+       uaecptr olda6 = trap_get_areg(ctx, 6);
+
+       trap_set_areg(ctx, 6, base);
+       retval = trap_Call68k(ctx, base + offset);
+       trap_set_areg(ctx, 6, olda6);
+
+       return retval;
+}
+
+/*
+* Call 68k function from extended trap.
+*/
+uae_u32 CallFunc(TrapContext *ctx, uaecptr func)
+{
+       return trap_Call68k(ctx, func);
+}
+
+
 /* UAE board traps */
 
 #define TRAP_THREADS (RTAREA_TRAP_DATA_NUM + RTAREA_TRAP_DATA_SEND_NUM)
@@ -585,212 +795,6 @@ TrapContext *alloc_host_thread_trap_context(void)
        }
 }
 
-/*
-* Set up extended trap context and call handler function
-*/
-static void trap_HandleExtendedTrap (TrapHandler handler_func, int has_retval)
-{
-       struct TrapContext *context = xcalloc (TrapContext, 1);
-
-       if (context) {
-               uae_sem_init (&context->switch_to_trap_sem, 0, 0);
-               uae_sem_init (&context->switch_to_emu_sem, 0, 0);
-
-               context->trap_handler = handler_func;
-               context->trap_has_retval = has_retval;
-
-               //context->saved_regs = regs;
-               copytocpucontext (&context->saved_regs);
-
-               /* Start thread to handle new trap context. */
-               uae_start_thread_fast (trap_thread, (void *)context, &context->thread);
-
-               /* Switch to trap context to begin execution of
-               * trap handler function.
-               */
-               uae_sem_post (&context->switch_to_trap_sem);
-
-               /* Wait for trap context to switch back to us.
-               *
-               * It'll do this when the trap handler is done - or when
-               * the handler wants to call 68k code. */
-               uae_sem_wait (&context->switch_to_emu_sem);
-       }
-}
-
-/*
-* Call m68k function from an extended trap handler
-*
-* This function is to be called from the trap context.
-*/
-static uae_u32 trap_Call68k(TrapContext *ctx, uaecptr func_addr)
-{
-       if (ctx->host_trap_data) {
-
-               return call_hardware_trap_back(ctx, 10, func_addr, 0, 0, 0);
-
-       } else {
-
-               /* Enter critical section - only one trap at a time, please! */
-               uae_sem_wait (&trap_mutex);
-               current_context = ctx;
-
-               /* Don't allow an interrupt and thus potentially another
-               * trap to be invoked while we hold the above mutex.
-               * This is probably just being paranoid. */
-               regs.intmask = 7;
-
-               /* Set up function call address. */
-               ctx->call68k_func_addr = func_addr;
-
-               /* Set PC to address of 68k call trap, so that it will be
-               * executed when emulator context resumes. */
-               m68k_setpc (m68k_call_trapaddr);
-               fill_prefetch ();
-
-               /* Switch to emulator context. */
-               uae_sem_post (&ctx->switch_to_emu_sem);
-
-               /* Wait for 68k call return handler to switch back to us. */
-               uae_sem_wait (&ctx->switch_to_trap_sem);
-
-               /* End critical section. */
-               uae_sem_post (&trap_mutex);
-
-               /* Get return value from 68k function called. */
-               return ctx->call68k_retval;
-       }
-}
-
-/*
-* Handles the emulator's side of a 68k call (from an extended trap)
-*/
-static uae_u32 REGPARAM2 m68k_call_handler (TrapContext *dummy_ctx)
-{
-       TrapContext *context = current_context;
-
-       uae_u32 sp;
-
-       sp = m68k_areg (regs, 7);
-
-       /* Push address of trap context on 68k stack. This is
-       * so the return trap can find this context. */
-       sp -= sizeof (void *);
-       put_pointer (sp, context);
-
-       /* Push addr to return handler trap on 68k stack.
-       * When the called m68k function does an RTS, the CPU will pull this
-       * address off the stack and so call the return handler. */
-       sp -= 4;
-       put_long (sp, m68k_return_trapaddr);
-
-       m68k_areg (regs, 7) = sp;
-
-       /* Set PC to address of 68k function to call. */
-       m68k_setpc (context->call68k_func_addr);
-       fill_prefetch ();
-
-       /* End critical section: allow other traps run. */
-       uae_sem_post (&trap_mutex);
-
-       /* Restore interrupts. */
-       regs.intmask = context->saved_regs.intmask;
-
-       /* Dummy return value. */
-       return 0;
-}
-
-/*
-* Handles the return from a 68k call at the emulator's side.
-*/
-static uae_u32 REGPARAM2 m68k_return_handler (TrapContext *dummy_ctx)
-{
-       TrapContext *context;
-       uae_u32 sp;
-
-       /* One trap returning at a time, please! */
-       uae_sem_wait (&trap_mutex);
-
-       /* Get trap context from 68k stack. */
-       sp = m68k_areg (regs, 7);
-       context = (TrapContext *)get_pointer (sp);
-       sp += sizeof (void *);
-       m68k_areg (regs, 7) = sp;
-
-       /* Get return value from the 68k call. */
-       context->call68k_retval = m68k_dreg (regs, 0);
-
-       /* Switch back to trap context. */
-       uae_sem_post (&context->switch_to_trap_sem);
-
-       /* Wait for trap context to switch back to us.
-       *
-       * It'll do this when the trap handler is done - or when
-       * the handler wants to call another 68k function. */
-       uae_sem_wait (&context->switch_to_emu_sem);
-
-       /* Dummy return value. */
-       return 0;
-}
-
-/*
-* Handles completion of an extended trap and passes
-* return value from trap function to 68k space.
-*/
-static uae_u32 REGPARAM2 exit_trap_handler (TrapContext *dummy_ctx)
-{
-       TrapContext *context = current_context;
-
-       /* Wait for trap context thread to exit. */
-       uae_wait_thread (context->thread);
-
-       /* Restore 68k state saved at trap entry. */
-       //regs = context->saved_regs;
-       copyfromcpucontext (&context->saved_regs, context->saved_regs.pc);
-
-       /* If trap is supposed to return a value, then store
-       * return value in D0. */
-       if (context->trap_has_retval)
-               m68k_dreg (regs, 0) = context->trap_retval;
-
-       uae_sem_destroy (&context->switch_to_trap_sem);
-       uae_sem_destroy (&context->switch_to_emu_sem);
-
-       xfree (context);
-
-       /* End critical section */
-       uae_sem_post (&trap_mutex);
-
-       /* Dummy return value. */
-       return 0;
-}
-
-
-
-/*
-* Call a 68k library function from extended trap.
-*/
-uae_u32 CallLib(TrapContext *ctx, uaecptr base, uae_s16 offset)
-{
-       uae_u32 retval;
-       uaecptr olda6 = trap_get_areg(ctx, 6);
-
-       trap_set_areg(ctx, 6, base);
-       retval = trap_Call68k(ctx, base + offset);
-       trap_set_areg(ctx, 6, olda6);
-
-       return retval;
-}
-
-/*
-* Call 68k function from extended trap.
-*/
-uae_u32 CallFunc(TrapContext *ctx, uaecptr func)
-{
-       return trap_Call68k(ctx, func);
-}
-
-
 /*
 * Initialize trap mechanism.
 */