From b95ef711ecd6282d818b79034dc418d473cb2b3e Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Wed, 10 Feb 2016 18:31:18 +0200 Subject: [PATCH] 3300b5 --- expansion.cpp | 235 ++++----- filesys.cpp | 262 +++++----- filesys_bootrom.cpp | 987 ++++++++++++++++++----------------- include/autoconf.h | 4 + include/custom.h | 3 +- include/memory.h | 1 + include/traps.h | 3 + memory.cpp | 6 +- od-win32/direct3d.cpp | 9 + od-win32/mman.cpp | 16 +- od-win32/win32.cpp | 10 +- od-win32/win32.h | 4 +- od-win32/win32gui.cpp | 8 +- od-win32/win32gui.h | 2 + od-win32/winuaechangelog.txt | 17 + ppc/ppc.cpp | 14 +- traps.cpp | 28 +- 17 files changed, 817 insertions(+), 792 deletions(-) diff --git a/expansion.cpp b/expansion.cpp index b2f82274..77f30d04 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -1001,8 +1001,7 @@ static addrbank *expamem_init_catweasel (int devnum) #ifdef FILESYS /* -* Filesystem device ROM -* This is very simple, the Amiga shouldn't be doing things with it. +* Filesystem device ROM/RAM space */ DECLARE_MEMORY_FUNCTIONS(filesys); @@ -1016,6 +1015,11 @@ addrbank filesys_bank = { static uae_u32 filesys_start; /* Determined by the OS */ +static bool filesys_write(uaecptr addr) +{ + return addr >= 0x4000; +} + static uae_u32 REGPARAM2 filesys_lget (uaecptr addr) { uae_u8 *m; @@ -1050,22 +1054,38 @@ static uae_u32 REGPARAM2 filesys_bget (uaecptr addr) return filesys_bank.baseaddr[addr]; } -static void REGPARAM2 filesys_lput (uaecptr addr, uae_u32 l) + +static void REGPARAM2 filesys_bput(uaecptr addr, uae_u32 b) { - write_log (_T("filesys_lput called PC=%08x\n"), M68K_GETPC); + addr -= filesys_start & 65535; + addr &= 65535; + if (!filesys_write(addr)) + return; + filesys_bank.baseaddr[addr] = b; } -static void REGPARAM2 filesys_wput (uaecptr addr, uae_u32 w) +static void REGPARAM2 filesys_lput (uaecptr addr, uae_u32 l) { - write_log (_T("filesys_wput called PC=%08x\n"), M68K_GETPC); + addr -= filesys_start & 65535; + addr &= 65535; + if (!filesys_write(addr)) + return; + filesys_bank.baseaddr[addr + 0] = l >> 24; + filesys_bank.baseaddr[addr + 1] = l >> 16; + filesys_bank.baseaddr[addr + 2] = l >> 8; + filesys_bank.baseaddr[addr + 3] = l >> 0; } -static void REGPARAM2 filesys_bput (uaecptr addr, uae_u32 b) +static void REGPARAM2 filesys_wput (uaecptr addr, uae_u32 w) { -#if EXP_DEBUG - write_log (_T("filesys_bput %x %x\n"), addr, b); -#endif + addr -= filesys_start & 65535; + addr &= 65535; + if (!filesys_write(addr)) + return; + filesys_bank.baseaddr[addr + 0] = w >> 8; + filesys_bank.baseaddr[addr + 1] = w & 0xff; } + static int REGPARAM2 filesys_check(uaecptr addr, uae_u32 size) { addr -= filesys_bank.start & 65535; @@ -1087,59 +1107,45 @@ DECLARE_MEMORY_FUNCTIONS(uaeboard); addrbank uaeboard_bank = { uaeboard_lget, uaeboard_wget, uaeboard_bget, uaeboard_lput, uaeboard_wput, uaeboard_bput, - default_xlate, default_check, NULL, _T("uaeboard"), _T("UAE Board"), + uaeboard_xlate, uaeboard_check, NULL, _T("uaeboard"), _T("UAE Board"), dummy_lgeti, dummy_wgeti, ABFLAG_IO | ABFLAG_SAFE | ABFLAG_PPCIOSPACE, S_READ, S_WRITE }; -static uae_u32 uaeboard_start; /* Determined by the OS */ -#define UAEBOARD_RAM_SIZE 16384 -#define UAEBOARD_RAM_OFFSET (65536 - UAEBOARD_RAM_SIZE) -#define UAEBOARD_IO_INTERFACE (UAEBOARD_RAM_OFFSET - 16) -static uae_u8 uaeboard_io_state; -static uae_u32 uaeboard_io_size, uaeboard_mem_ptr, uaeboard_mem_use; +uae_u32 uaeboard_base; /* Determined by the OS */ +static uae_u32 uaeboard_ram_start; +#define UAEBOARD_WRITEOFFSET 0x4000 + +uaecptr uaeboard_alloc_ram(uae_u32 size) +{ + size += 7; + size &= ~7; + uaecptr p = uaeboard_ram_start + uaeboard_base; + memset(uaeboard_bank.baseaddr + uaeboard_ram_start, 0, size); + uaeboard_ram_start += size; + return p; +} + +static bool uaeboard_write(uaecptr addr) +{ + if (addr >= UAEBOARD_WRITEOFFSET) + return true; + return false; +} static uae_u32 REGPARAM2 uaeboard_wget(uaecptr addr) { uae_u8 *m; - addr -= uaeboard_start & 65535; + addr -= uaeboard_base & 65535; addr &= 65535; - if (addr == 0x200 || addr == 0x201) { - mousehack_wakeup(); - } m = uaeboard_bank.baseaddr + addr; -#if EXP_DEBUG - write_log(_T("uaeboard_wget %x %x\n"), addr, do_get_mem_word((uae_u16 *)m)); -#endif uae_u16 v = do_get_mem_word((uae_u16 *)m); - - if (addr >= UAEBOARD_IO_INTERFACE) { - if (uaeboard_io_state & 16) { - uaeboard_mem_ptr &= (UAEBOARD_RAM_SIZE - 1); - if (uaeboard_mem_ptr + uaeboard_io_size > UAEBOARD_RAM_SIZE) - uaeboard_mem_ptr = 0; - if (addr == UAEBOARD_IO_INTERFACE + 8) { - uaeboard_io_state |= 32; - uaeboard_mem_use = uaeboard_mem_ptr + UAEBOARD_RAM_OFFSET; - v = uaeboard_mem_use >> 16; - } else if (addr == UAEBOARD_IO_INTERFACE + 8 + 2) { - uaeboard_io_state |= 64; - uaeboard_mem_use = uaeboard_mem_ptr + UAEBOARD_RAM_OFFSET; - v = uaeboard_mem_use >> 0; - } - if ((uaeboard_io_state & (32 | 64 | 128)) == (32 | 64)) { - uaeboard_mem_ptr += uaeboard_io_size; - uaeboard_io_state |= 128; - } - } - } - return v; } static uae_u32 REGPARAM2 uaeboard_lget(uaecptr addr) { - addr -= uaeboard_start & 65535; + addr -= uaeboard_base & 65535; addr &= 65535; uae_u32 v = uaeboard_wget(addr) << 16; v |= uaeboard_wget(addr + 2); @@ -1148,109 +1154,63 @@ static uae_u32 REGPARAM2 uaeboard_lget(uaecptr addr) static uae_u32 REGPARAM2 uaeboard_bget(uaecptr addr) { - addr -= uaeboard_start & 65535; + addr -= uaeboard_base & 65535; addr &= 65535; - if (addr == 0x200 || addr == 0x201) { - mousehack_wakeup(); - } else if (addr == UAEBOARD_IO_INTERFACE) { - uaeboard_bank.baseaddr[UAEBOARD_IO_INTERFACE] = uaeboard_io_state == 0; - if (!uaeboard_io_state) { - // mark allocated - uaeboard_io_state = 1; - } - } else if (addr == UAEBOARD_IO_INTERFACE + 2) { - if (uaeboard_io_state & 8) { - uaeboard_bank.baseaddr[addr] = 1; - uaeboard_io_state |= 16; - } - } else if (addr == uaeboard_mem_use) { - uaeboard_bank.baseaddr[addr] = 1; - } -#if EXP_DEBUG - write_log(_T("uaeboard_bget %x %x\n"), addr, uaeboard_bank.baseaddr[addr]); -#endif return uaeboard_bank.baseaddr[addr]; } static void REGPARAM2 uaeboard_wput(uaecptr addr, uae_u32 w) { - addr -= uaeboard_start & 65535; + addr -= uaeboard_base & 65535; addr &= 65535; - if (addr >= 0x200 + 0x20 && addr < 0x200 + 0x24) { - mousehack_write(addr - 0x200, w); - } else if (addr >= UAEBOARD_IO_INTERFACE) { - uae_u8 *m = uaeboard_bank.baseaddr + addr; - put_word_host(m, w); - if (uaeboard_io_state) { - if (addr == UAEBOARD_IO_INTERFACE + 4) - uaeboard_io_state |= 2; - if (addr == UAEBOARD_IO_INTERFACE + 6) - uaeboard_io_state |= 4; - if (uaeboard_io_state == (1 | 2 | 4)) { - uae_u32 *m2 = (uae_u32 *)(uaeboard_bank.baseaddr + UAEBOARD_IO_INTERFACE + 4); - // size received - uaeboard_io_state |= 8; - uaeboard_io_size = do_get_mem_long(m2); - } - } - // writing command byte executes it - if (addr == uaeboard_mem_use) { - w &= 0xffff; - if (w != 0xffff && w != 0) { - uae_u8 *m2 = uaeboard_bank.baseaddr + addr; - put_long_host(m2 + 4, uaeboard_demux((uae_u32*)m2)); - } - } - } else if (addr >= 0x2000 && addr <= 0x3000) { - uae_u8 *m = uaeboard_bank.baseaddr + addr; - put_word_host(m, w); - } -#if EXP_DEBUG - write_log(_T("uaeboard_wput %08x = %04x PC=%08x\n"), addr, w, M68K_GETPC); -#endif + if (!uaeboard_write(addr)) + return; + uae_u8 *m = uaeboard_bank.baseaddr + addr; + put_word_host(m, w); } static void REGPARAM2 uaeboard_lput(uaecptr addr, uae_u32 l) { - addr -= uaeboard_start & 65535; + addr -= uaeboard_base & 65535; addr &= 65535; - if (addr >= 0x200 + 0x20 && addr < 0x200 + 0x24) { - mousehack_write(addr - 0x200, l >> 16); - mousehack_write(addr - 0x200 + 2, l); - } else if (addr >= UAEBOARD_IO_INTERFACE) { - uaeboard_wput(addr, l >> 16); - uaeboard_wput(addr + 2, l); - } -#if EXP_DEBUG - write_log(_T("uaeboard_lput %08x = %08x PC=%08x\n"), addr, l, M68K_GETPC); -#endif + if (!uaeboard_write(addr)) + return; + uaeboard_wput(addr, l >> 16); + uaeboard_wput(addr + 2, l); } static void REGPARAM2 uaeboard_bput(uaecptr addr, uae_u32 b) { - addr -= uaeboard_start & 65535; + addr -= uaeboard_base & 65535; addr &= 65535; - if (addr == uaeboard_mem_use) { - uaeboard_io_size = 0; - uaeboard_mem_use = 0; - uaeboard_io_state = 0; - } - if (addr >= UAEBOARD_RAM_OFFSET || (addr >= 0x2000 && addr <= 0x3000)) { - uaeboard_bank.baseaddr[addr] = b; - } -#if EXP_DEBUG - write_log(_T("uaeboard_bput %x %x\n"), addr, b); -#endif + if (!uaeboard_write(addr)) + return; + uaeboard_bank.baseaddr[addr] = b; +} + +static int REGPARAM2 uaeboard_check(uaecptr addr, uae_u32 size) +{ + addr -= uaeboard_base & 65535; + addr &= 65535; + return (addr + size) <= uaeboard_bank.allocated; +} +static uae_u8 *REGPARAM2 uaeboard_xlate(uaecptr addr) +{ + addr -= uaeboard_base & 65535; + addr &= 65535; + return filesys_bank.baseaddr + addr; } static addrbank *expamem_map_uaeboard(void) { - uaeboard_start = expamem_z2_pointer; - map_banks_z2(&uaeboard_bank, uaeboard_start >> 16, 1); + uaeboard_base = expamem_z2_pointer; + uaeboard_ram_start = UAEBOARD_WRITEOFFSET; + map_banks_z2(&uaeboard_bank, uaeboard_base >> 16, 1); if (currprefs.uaeboard > 1) - map_banks_z2(&rtarea_bank, (uaeboard_start + 65536) >> 16, 1); + map_banks_z2(&rtarea_bank, (uaeboard_base + 65536) >> 16, 1); return &uaeboard_bank; } + static addrbank* expamem_init_uaeboard(int devnum) { bool ks12 = ks12orolder(); @@ -1320,19 +1280,6 @@ static addrbank* expamem_init_uaeboard(int devnum) memcpy(p, expamem, 0x100); - p += 0x100; - - p[0] = 0x00; - p[1] = 0x00; - p[2] = 0x02; - p[3] = 0x00; - - p[4] = (uae_u8)(UAEBOARD_IO_INTERFACE >> 24); - p[5] = (uae_u8)(UAEBOARD_IO_INTERFACE >> 16); - p[6] = (uae_u8)(UAEBOARD_IO_INTERFACE >> 8); - p[7] = (uae_u8)(UAEBOARD_IO_INTERFACE >> 0); - uaeboard_io_state = 0; - return NULL; } @@ -2441,12 +2388,10 @@ void expansion_init (void) allocate_expamem (); #ifdef FILESYS - if (currprefs.uaeboard < 2) { - filesys_bank.allocated = 0x10000; - if (!mapped_malloc (&filesys_bank)) { - write_log (_T("virtual memory exhausted (filesysory)!\n")); - exit (0); - } + filesys_bank.allocated = 0x10000; + if (!mapped_malloc (&filesys_bank)) { + write_log (_T("virtual memory exhausted (filesysory)!\n")); + exit (0); } #endif if (currprefs.uaeboard) { diff --git a/filesys.cpp b/filesys.cpp index 34725a1e..3f13c630 100644 --- a/filesys.cpp +++ b/filesys.cpp @@ -1302,6 +1302,7 @@ typedef struct _unit { /* Amiga stuff */ uaecptr dosbase; + /* volume points to our IO board, always 1:1 mapping */ uaecptr volume; uaecptr port; /* Our port */ uaecptr locklist; @@ -1369,20 +1370,22 @@ static uae_u32 a_uniq, key_uniq; static void readdpacket(TrapContext *ctx, dpacket *packet, uaecptr pck) { + // Read enough to get also all 64-bit fields packet->packet_addr = pck; - trap_get_bytes(ctx, packet->packet_data, pck, 48); + trap_get_bytes(ctx, packet->packet_data, pck, dp_Max); } static void writedpacket(TrapContext *ctx, dpacket *packet) { - trap_put_bytes(ctx, packet->packet_data, packet->packet_addr, 48); + // 32 = saves both 32-bit and 64-bit RESx fields + trap_put_bytes(ctx, packet->packet_data + 12, packet->packet_addr + 12, 32 - 12); } static void set_quadp(TrapContext *ctx, uaecptr p, uae_s64 v) { if (!trap_valid_address(ctx, p, 8)) return; - put_long(p, v >> 32); - put_long(p + 4, (uae_u64)v); + trap_put_long(ctx, p, v >> 32); + trap_put_long(ctx, p + 4, (uae_u64)v); } static uae_u64 get_quadp(TrapContext *ctx, uaecptr p) { @@ -1419,8 +1422,7 @@ static int flush_cache (Unit *unit, int num); static TCHAR *char1(TrapContext *ctx, uaecptr addr) { - static uae_char buf[1024]; - static TCHAR bufx[1024]; + uae_char buf[1024]; #if TRAPMD trap_get_string(ctx, (uae_u8*)buf, addr, sizeof(buf)); @@ -1431,13 +1433,12 @@ static TCHAR *char1(TrapContext *ctx, uaecptr addr) addr++; } while (buf[i++] && i < sizeof (buf)); #endif - return au_fs_copy (bufx, sizeof (bufx) / sizeof (TCHAR), buf); + return au_fs(buf); } static TCHAR *bstr1(TrapContext *ctx, uaecptr addr) { - static TCHAR bufx[257]; - static uae_char buf[257]; + uae_char buf[257]; int n = trap_get_byte(ctx, addr); addr++; @@ -1448,7 +1449,7 @@ static TCHAR *bstr1(TrapContext *ctx, uaecptr addr) buf[i] = trap_get_byte(ctx, addr); #endif buf[n] = 0; - return au_fs_copy (bufx, sizeof (bufx) / sizeof (TCHAR), buf); + return au_fs(buf); } static TCHAR *bstr(TrapContext *ctx, Unit *unit, uaecptr addr) @@ -1469,14 +1470,9 @@ static TCHAR *bstr(TrapContext *ctx, Unit *unit, uaecptr addr) } static TCHAR *cstr(TrapContext *ctx, Unit *unit, uaecptr addr) { - int i; uae_char buf[257]; - for (i = 0;;i++,addr++) { - buf[i] = trap_get_byte(ctx, addr); - if (!buf[i]) - break; - } + trap_get_string(ctx, buf, addr, sizeof buf); au_fs_copy (unit->tmpbuf3, sizeof (unit->tmpbuf3) / sizeof (TCHAR), buf); return unit->tmpbuf3; } @@ -1685,14 +1681,20 @@ static uae_s64 key_seek(Key *k, uae_s64 offset, int whence) return fs_lseek64 (k->fd, offset, whence); } -static void set_highcyl(TrapContext *ctx, UnitInfo *ui, uae_u32 blocks) +static void set_highcyl(uaecptr volume, uae_u32 blocks) { - uaecptr startup = trap_get_long(ctx, ui->devicenode + 7 * 4) << 2; - uaecptr env = trap_get_long(ctx, startup + 8) << 2; - trap_put_long(ctx, env + 10 * 4, blocks); + put_long(volume + 184 - 32, blocks); +#if 0 + // FIXME! + if (trap_is_indirect()) + return; + uaecptr startup = get_long(ui->devicenode + 7 * 4) << 2; + uaecptr env = get_long(startup + 8) << 2; + put_long(env + 10 * 4, blocks); +#endif } -static void set_volume_name(TrapContext *ctx, Unit *unit, struct mytimeval *tv) +static void set_volume_name(Unit *unit, struct mytimeval *tv) { int namelen; int i; @@ -1700,16 +1702,16 @@ static void set_volume_name(TrapContext *ctx, Unit *unit, struct mytimeval *tv) s = ua_fs (unit->ui.volname, -1); namelen = strlen (s); - trap_put_byte(ctx, unit->volume + 44, namelen); + put_byte(unit->volume + 44, namelen); for (i = 0; i < namelen; i++) - trap_put_byte(ctx, unit->volume + 45 + i, s[i]); - trap_put_byte(ctx, unit->volume + 45 + namelen, 0); + put_byte(unit->volume + 45 + i, s[i]); + put_byte(unit->volume + 45 + namelen, 0); if (tv && (tv->tv_sec || tv->tv_usec)) { int days, mins, ticks; timeval_to_amiga (tv, &days, &mins, &ticks, 50); - trap_put_long(ctx, unit->volume + 16, days); - trap_put_long(ctx, unit->volume + 20, mins); - trap_put_long(ctx, unit->volume + 24, ticks); + put_long(unit->volume + 16, days); + put_long(unit->volume + 20, mins); + put_long(unit->volume + 24, ticks); } xfree (s); unit->rootnode.aname = unit->ui.volname; @@ -1717,11 +1719,11 @@ static void set_volume_name(TrapContext *ctx, Unit *unit, struct mytimeval *tv) unit->rootnode.mountcount = unit->mountcount; } -static int filesys_isvolume(TrapContext *ctx, Unit *unit) +static int filesys_isvolume(Unit *unit) { if (!unit->volume) return 0; - return trap_get_byte(ctx, unit->volume + 44) || unit->ui.unknown_media; + return get_byte(unit->volume + 44) || unit->ui.unknown_media; } static void clear_exkeys (Unit *unit) @@ -1770,21 +1772,6 @@ static void filesys_delayed_change (Unit *u, int frames, const TCHAR *rootdir, c write_log (_T("FILESYS: delayed insert %d: '%s' ('%s')\n"), u->unit, volume ? volume : _T(""), rootdir); } -static uae_u32 filesys_eject_cb(TrapContext *ctx, void *ud) -{ - UnitInfo *ui = (UnitInfo*)ud; - Unit *u = ui->self; - - if (!filesys_isvolume(ctx, u)) - return 0; - u->mount_changed = -1; - u->mountcount++; - write_log(_T("FILESYS: volume '%s' removal request\n"), u->ui.volname); - // -1 = remove, -2 = remove + remove device node - trap_put_byte(ctx, u->volume + 172 - 32, ui->unit_type == UNIT_CDFS ? -1 : -2); - uae_Signal(trap_get_long(ctx, u->volume + 176 - 32), 1 << 13); - return 1; -} int filesys_eject(int nr) { UnitInfo *ui = &mountinfo.ui[nr]; @@ -1796,7 +1783,14 @@ int filesys_eject(int nr) return 0; if (!is_virtual (nr)) return 0; - trap_callback(filesys_eject_cb, ui); + if (!filesys_isvolume(u)) + return 0; + u->mount_changed = -1; + u->mountcount++; + write_log(_T("FILESYS: volume '%s' removal request\n"), u->ui.volname); + // -1 = remove, -2 = remove + remove device node + put_byte(u->volume + 172 - 32, ui->unit_type == UNIT_CDFS ? -1 : -2); + uae_Signal(get_long(u->volume + 176 - 32), 1 << 13); return 1; } @@ -1807,8 +1801,6 @@ static int heartbeat_task; // This uses filesystem process to reduce resource usage void setsystime (void) { - TrapContext *ctx = NULL; - if (!currprefs.tod_hack || !rtarea_bank.baseaddr) return; heartbeat = get_long_host(rtarea_bank.baseaddr + RTAREA_HEARTBEAT); @@ -1822,9 +1814,9 @@ static void setsystime_vblank (void) TrapContext *ctx = NULL; for (u = units; u; u = u->next) { - if (is_virtual(u->unit) && filesys_isvolume(ctx, u)) { - trap_put_byte(ctx, u->volume + 173 - 32, trap_get_byte(ctx, u->volume + 173 - 32) | 1); - uae_Signal(trap_get_long(ctx, u->volume + 176 - 32), 1 << 13); + if (is_virtual(u->unit) && filesys_isvolume(u)) { + put_byte(u->volume + 173 - 32, get_byte(u->volume + 173 - 32) | 1); + uae_Signal(get_long(u->volume + 176 - 32), 1 << 13); break; } } @@ -1859,9 +1851,9 @@ static void debugger_boot(void) TrapContext *ctx = NULL; for (u = units; u; u = u->next) { - if (is_virtual(u->unit) && filesys_isvolume(ctx, u)) { - trap_put_byte(ctx, u->volume + 173 - 32, trap_get_byte(ctx, u->volume + 173 - 32) | 2); - uae_Signal(trap_get_long(ctx, u->volume + 176 - 32), 1 << 13); + if (is_virtual(u->unit) && filesys_isvolume(u)) { + put_byte(u->volume + 173 - 32, get_byte(u->volume + 173 - 32) | 2); + uae_Signal(get_long(u->volume + 176 - 32), 1 << 13); break; } } @@ -1881,7 +1873,7 @@ int filesys_insert (int nr, const TCHAR *volume, const TCHAR *rootdir, bool read if (nr < 0) { for (u = units; u; u = u->next) { if (is_virtual (u->unit)) { - if (!filesys_isvolume(ctx, u) && mountinfo.ui[u->unit].canremove) + if (!filesys_isvolume(u) && mountinfo.ui[u->unit].canremove) break; } } @@ -1908,7 +1900,7 @@ int filesys_insert (int nr, const TCHAR *volume, const TCHAR *rootdir, bool read return -1; if (!is_virtual(nr)) return 0; - if (filesys_isvolume(ctx, u)) { + if (filesys_isvolume(u)) { filesys_delayed_change (u, 50, rootdir, volume, readonly, flags); return -1; } @@ -1921,13 +1913,13 @@ int filesys_insert (int nr, const TCHAR *volume, const TCHAR *rootdir, bool read write_log (_T("filesys_insert %d done!\n"), nr); - trap_put_byte(ctx, u->volume + 172 - 32, -3); // wait for insert - uae_Signal (trap_get_long(ctx, u->volume + 176 - 32), 1 << 13); + put_byte(u->volume + 172 - 32, -3); // wait for insert + uae_Signal (get_long(u->volume + 176 - 32), 1 << 13); return 100 + nr; } -static uae_u32 filesys_media_change_reply (TrapContext *ctx, int mode) +static uae_u32 filesys_media_change_reply (int mode) { int nr; UnitInfo *ui = NULL; @@ -1985,7 +1977,7 @@ static uae_u32 filesys_media_change_reply (TrapContext *ctx, int mode) if (!u->ui.cdfs_superblock) return 0; struct isofs_info ii; - set_highcyl(ctx, ui, 0); + set_highcyl(u->volume, 0); bool r = isofs_mediainfo (ui->cdfs_superblock, &ii); if (r && ii.media) { u->ui.unknown_media = ii.unknown_media; @@ -1993,7 +1985,7 @@ static uae_u32 filesys_media_change_reply (TrapContext *ctx, int mode) u->ui.volname = ui->volname = my_strdup (ii.volumename); ctime.tv_sec = ii.creation; ctime.tv_usec = 0; - set_highcyl(ctx, ui, ii.blocks); + set_highcyl(u->volume, ii.blocks); #ifdef RETROPLATFORM rp_cd_image_change (ui->cddevno, ii.devname); #endif @@ -2015,7 +2007,7 @@ static uae_u32 filesys_media_change_reply (TrapContext *ctx, int mode) write_log (_T("FILESYS: inserted unreadable volume NR=%d RO=%d\n"), nr, u->mount_readonly); } else { write_log (_T("FILESYS: inserted volume NR=%d RO=%d '%s' ('%s')\n"), nr, u->mount_readonly, ui->volname, u->mount_rootdir); - set_volume_name(ctx, u, &ctime); + set_volume_name(u, &ctime); if (u->mount_flags >= 0) ui->volflags = u->volflags = u->ui.volflags = u->mount_flags; if (uci != NULL) { @@ -2027,8 +2019,8 @@ static uae_u32 filesys_media_change_reply (TrapContext *ctx, int mode) if (uci != NULL) uci->ci.readonly = u->mount_readonly; } - trap_put_byte(ctx, u->volume + 44, 0); - trap_put_byte(ctx, u->volume + 172 - 32, 1); + put_byte(u->volume + 44, 0); + put_byte(u->volume + 172 - 32, 1); } xfree (u->mount_volume); @@ -2067,7 +2059,7 @@ int filesys_media_change (const TCHAR *rootdir, int inserted, struct uaedev_conf ui = &mountinfo.ui[u->unit]; // inserted == 2: drag&drop insert, do not replace existing normal drives if (inserted < 2 && ui->rootdir && !memcmp (ui->rootdir, rootdir, _tcslen (rootdir)) && _tcslen (rootdir) + 3 >= _tcslen (ui->rootdir)) { - if (filesys_isvolume(ctx, u) && inserted) { + if (filesys_isvolume(u) && inserted) { if (uci)ctx, filesys_delayed_change (u, 50, rootdir, uci->ci.volname, uci->ci.readonly, 0); return 0; @@ -2112,7 +2104,7 @@ int filesys_media_change (const TCHAR *rootdir, int inserted, struct uaedev_conf /* new volume inserted and it was previously mounted? */ if (nr >= 0) { - if (!filesys_isvolume(ctx, u)) /* not going to mount twice */ + if (!filesys_isvolume(u)) /* not going to mount twice */ return filesys_insert(nr, volptr, rootdir, false, -1); return 0; } @@ -2241,12 +2233,12 @@ bool filesys_do_disk_change (int cdunitnum, bool insert) if (!ui->cd_open) return false; if (insert) { - if (filesys_isvolume(ctx, u)) + if (filesys_isvolume(u)) return false; filesys_insert (nr, NULL, _T("/"), true, MYVOLUMEINFO_CDFS | MYVOLUMEINFO_READONLY); return true; } else { - if (!filesys_isvolume(ctx, u)) + if (!filesys_isvolume(u)) return false; filesys_eject (nr); return true; @@ -3064,7 +3056,7 @@ static Unit *startup_create_unit(TrapContext *ctx, UnitInfo *uinfo, int num) } -static bool mount_cd(TrapContext *ctx, UnitInfo *uinfo, int nr, struct mytimeval *ctime, uae_u64 *uniq) +static bool mount_cd(UnitInfo *uinfo, int nr, struct mytimeval *ctime, uae_u64 *uniq, uaecptr volume) { uinfo->cddevno = nr - cd_unit_offset; if (!sys_command_open (uinfo->cddevno)) { @@ -3087,7 +3079,7 @@ static bool mount_cd(TrapContext *ctx, UnitInfo *uinfo, int nr, struct mytimeval ctime->tv_sec = ii.creation; ctime->tv_usec = 0; } - set_highcyl(ctx, uinfo, ii.totalblocks); + set_highcyl(volume, ii.totalblocks); #ifdef RETROPLATFORM rp_cd_image_change (uinfo->cddevno, ii.devname); #endif @@ -3104,8 +3096,6 @@ static void *filesys_thread (void *unit_v); #endif static void filesys_start_thread (UnitInfo *ui, int nr) { - TrapContext *ctx = NULL; - ui->unit_pipe = 0; ui->back_pipe = 0; ui->reset_state = FS_STARTUP; @@ -3117,14 +3107,14 @@ static void filesys_start_thread (UnitInfo *ui, int nr) if (is_virtual (nr)) { ui->unit_pipe = xmalloc (smp_comm_pipe, 1); ui->back_pipe = xmalloc (smp_comm_pipe, 1); - init_comm_pipe (ui->unit_pipe, 300, 3); + init_comm_pipe (ui->unit_pipe, 400, 3); init_comm_pipe (ui->back_pipe, 100, 1); uae_start_thread (_T("filesys"), filesys_thread, (void *)ui, &ui->tid); } #endif if (isrestore ()) { if (ui->unit_type == UNIT_CDFS) { - mount_cd(ctx, ui, nr, NULL, &ui->self->rootnode.uniq_external); + mount_cd(ui, nr, NULL, &ui->self->rootnode.uniq_external, ui->self->volume); } startup_update_unit (ui->self, ui); } @@ -3133,6 +3123,17 @@ static void filesys_start_thread (UnitInfo *ui, int nr) static uae_u32 REGPARAM2 startup_handler(TrapContext *ctx) { + uae_u32 mode = trap_get_dreg(ctx, 0); + + if (mode == 1) { + uaecptr addr = 0; + if (currprefs.uaeboard > 1) { + // return board ram instead of allocating normal RAM + addr = uaeboard_alloc_ram(trap_get_dreg(ctx, 1)); + } + return addr; + } + /* Just got the startup packet. It's in D3. DosBase is in A2, * our allocated volume structure is in A3, A5 is a pointer to * our port. */ @@ -3142,7 +3143,7 @@ static uae_u32 REGPARAM2 startup_handler(TrapContext *ctx) uaecptr arg1 = trap_get_long(ctx, pkt + dp_Arg1); uaecptr arg2 = trap_get_long(ctx, pkt + dp_Arg2); uaecptr arg3 = trap_get_long(ctx, pkt + dp_Arg3); - uaecptr devnode; + uaecptr devnode, volume; int nr; Unit *unit; UnitInfo *uinfo; @@ -3176,11 +3177,12 @@ static uae_u32 REGPARAM2 startup_handler(TrapContext *ctx) uinfo = mountinfo.ui + nr; //devnode = arg3 << 2; devnode = uinfo->devicenode; + volume = trap_get_areg(ctx, 3) + 32; cdays = 3800 + nr; if (uinfo->unit_type == UNIT_CDFS) { ed = ef = 0; - if (!mount_cd(ctx, uinfo, nr, &ctime, &uniq)) { + if (!mount_cd(uinfo, nr, &ctime, &uniq, volume)) { trap_put_long(ctx, pkt + dp_Res1, DOS_FALSE); trap_put_long(ctx, pkt + dp_Res2, ERROR_DEVICE_NOT_MOUNTED); return 0; @@ -3214,7 +3216,7 @@ static uae_u32 REGPARAM2 startup_handler(TrapContext *ctx) unit->dosbase = trap_get_areg(ctx, 2); /* make new volume */ - unit->volume = trap_get_areg(ctx, 3) + 32; + unit->volume = volume; trap_put_long(ctx, unit->volume + 180 - 32, devnode); #ifdef UAE_FILESYS_THREADS unit->locklist = trap_get_areg(ctx, 3) + 8; @@ -3238,7 +3240,7 @@ static uae_u32 REGPARAM2 startup_handler(TrapContext *ctx) if (!uinfo->wasisempty && !uinfo->unknown_media) { int isvirtual = unit->volflags & (MYVOLUMEINFO_ARCHIVE | MYVOLUMEINFO_CDFS); /* Set volume if non-empty */ - set_volume_name(ctx, unit, &ctime); + set_volume_name(unit, &ctime); if (!isvirtual) fsdb_clean_dir (&unit->rootnode); } @@ -3272,7 +3274,7 @@ static void do_info(TrapContext *ctx, Unit *unit, dpacket *packet, uaecptr info, if (unit->volflags & MYVOLUMEINFO_ARCHIVE) { ret = zfile_fs_usage_archive (unit->ui.rootdir, 0, &fsu); fs = true; - media = filesys_isvolume(ctx, unit) != 0; + media = filesys_isvolume(unit) != 0; } else if (unit->volflags & MYVOLUMEINFO_CDFS) { struct isofs_info ii; ret = isofs_mediainfo (unit->ui.cdfs_superblock, &ii) ? 0 : 1; @@ -3290,7 +3292,7 @@ static void do_info(TrapContext *ctx, Unit *unit, dpacket *packet, uaecptr info, if (ret) err = dos_errno (); fs = true; - media = filesys_isvolume(ctx, unit) != 0; + media = filesys_isvolume(unit) != 0; } if (ret != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); @@ -3572,7 +3574,7 @@ static void action_add_notify(TrapContext *ctx, Unit *unit, dpacket *packet) TRACE((_T("ACTION_ADD_NOTIFY\n"))); - name = my_strdup (char1(ctx, trap_get_long(ctx, nr + 4))); + name = char1(ctx, trap_get_long(ctx, nr + 4)); flags = trap_get_long(ctx, nr + 12); if (!(flags & (NRF_SEND_MESSAGE | NRF_SEND_SIGNAL))) { @@ -3643,9 +3645,9 @@ static void free_lock(TrapContext *ctx, Unit *unit, uaecptr lock) if (! lock) return; - uaecptr curlock = trap_get_long(ctx, unit->volume + 28); + uaecptr curlock = get_long(unit->volume + 28); if (lock == curlock << 2) { - trap_put_long(ctx, unit->volume + 28, trap_get_long(ctx, lock)); + put_long(unit->volume + 28, trap_get_long(ctx, lock)); } else { uaecptr current = curlock; uaecptr next = 0; @@ -4157,7 +4159,7 @@ static void record_timeout(TrapContext *ctx, Unit *unit) PUT_PCK_RES2 (lr->packet, ERROR_LOCK_TIMEOUT); // mark packet as complete trap_put_long(ctx, lr->msg + 4, 0xfffffffe); - uae_Signal (trap_get_long(ctx, unit->volume + 176 - 32), 1 << 13); + uae_Signal (get_long(unit->volume + 176 - 32), 1 << 13); if (prev) prev->next = lr->next; else @@ -4678,9 +4680,9 @@ static uae_u32 REGPARAM2 fsmisc_helper(TrapContext *ctx) case 0: return exall_helper(ctx); case 1: - return filesys_media_change_reply (ctx, 0); + return filesys_media_change_reply (0); case 2: - return filesys_media_change_reply (ctx, 1); + return filesys_media_change_reply (1); case 3: uae_u32 t = getlocaltime (); uae_u32 secs = (uae_u32)t - (8 * 365 + 2) * 24 * 60 * 60; @@ -4790,7 +4792,7 @@ static void populate_directory (Unit *unit, a_inode *base) unit->total_locked_ainos++; } TRACE3((_T("Populating directory, child %s, locked_children %d\n"), - base->child->nname, base->locked_children)); + base->child ? base->child->nname : _T(""), base->locked_children)); for (;;) { uae_u64 uniq = 0; TCHAR fn[MAX_DPATH]; @@ -5214,7 +5216,7 @@ static void action_read(TrapContext *ctx, Unit *unit, dpacket *packet) } PUT_PCK_RES1 (packet, actual); size = 0; - } else if (!trap_valid_address(ctx, addr, size)) { + } else { /* check if filesize < size */ uae_s64 filesize, cur; @@ -5251,10 +5253,8 @@ static void action_read(TrapContext *ctx, Unit *unit, dpacket *packet) PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, dos_errno ()); } else { - int i; PUT_PCK_RES1 (packet, actual); - for (i = 0; i < actual; i++) - trap_put_byte(ctx, addr + i, buf[i]); + trap_put_bytes(ctx, buf, addr, actual); k->file_pos += actual; } xfree (buf); @@ -5262,14 +5262,21 @@ static void action_read(TrapContext *ctx, Unit *unit, dpacket *packet) size = 0; } } + if (size) { + + if (key_seek(k, k->file_pos, SEEK_SET) < 0) { + PUT_PCK_RES1(packet, 0); + PUT_PCK_RES2(packet, dos_errno()); + return; + } + if (trap_is_indirect()) { uae_u8 buf[RTAREA_TRAP_DATA_EXTRA_SIZE]; actual = 0; - int sizecnt = size; - while (sizecnt > 0) { - int toread = sizecnt > RTAREA_TRAP_DATA_EXTRA_SIZE ? RTAREA_TRAP_DATA_EXTRA_SIZE : sizecnt; + while (size > 0) { + int toread = size > RTAREA_TRAP_DATA_EXTRA_SIZE ? RTAREA_TRAP_DATA_EXTRA_SIZE : size; int read = fs_read(k->fd, buf, toread); if (read < 0) { actual = -1; @@ -5278,7 +5285,7 @@ static void action_read(TrapContext *ctx, Unit *unit, dpacket *packet) if (read == 0) break; trap_put_bytes(ctx, buf, addr, read); - sizecnt -= read; + size -= read; addr += read; actual += read; if (read < toread) @@ -5289,13 +5296,6 @@ static void action_read(TrapContext *ctx, Unit *unit, dpacket *packet) /* normal fast read */ uae_u8 *realpt = get_real_address (addr); - - if (key_seek(k, k->file_pos, SEEK_SET) < 0) { - PUT_PCK_RES1 (packet, 0); - PUT_PCK_RES2 (packet, dos_errno ()); - return; - } - actual = fs_read (k->fd, realpt, size); } @@ -5341,11 +5341,19 @@ static void action_write(TrapContext *ctx, Unit *unit, dpacket *packet) } if (size == 0) { + actual = 0; PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, 0); + } else if (trap_valid_address(ctx, addr, size)) { + if (key_seek(k, k->file_pos, SEEK_SET) < 0) { + PUT_PCK_RES1(packet, 0); + PUT_PCK_RES2(packet, dos_errno()); + return; + } + if (trap_is_indirect()) { uae_u8 buf[RTAREA_TRAP_DATA_EXTRA_SIZE]; @@ -5371,13 +5379,6 @@ static void action_write(TrapContext *ctx, Unit *unit, dpacket *packet) } else { uae_u8 *realpt = get_real_address (addr); - - if (key_seek(k, k->file_pos, SEEK_SET) < 0) { - PUT_PCK_RES1 (packet, 0); - PUT_PCK_RES2 (packet, dos_errno ()); - return; - } - actual = fs_write (k->fd, realpt, size); } @@ -5397,8 +5398,7 @@ static void action_write(TrapContext *ctx, Unit *unit, dpacket *packet) return; } - for (i = 0; i < size; i++) - buf[i] = trap_get_byte(ctx, addr + i); + trap_get_bytes(ctx, buf, addr, size); actual = fs_write (k->fd, buf, size); xfree (buf); @@ -6093,7 +6093,7 @@ static void action_rename_object(TrapContext *ctx, Unit *unit, dpacket *packet) static void action_current_volume(TrapContext *ctx, Unit *unit, dpacket *packet) { - if (filesys_isvolume(ctx, unit)) + if (filesys_isvolume(unit)) PUT_PCK_RES1 (packet, unit->volume >> 2); else PUT_PCK_RES1 (packet, 0); @@ -6114,7 +6114,7 @@ static void action_rename_disk(TrapContext *ctx, Unit *unit, dpacket *packet) /* get volume name */ xfree (unit->ui.volname); unit->ui.volname = bstr1(ctx, name); - set_volume_name(ctx, unit, 0); + set_volume_name(unit, 0); PUT_PCK_RES1 (packet, DOS_TRUE); } @@ -6553,16 +6553,16 @@ static uae_u32 REGPARAM2 exter_int_helper(TrapContext *ctx) uaecptr msg = trap_get_areg(ctx, 4); unit->cmds_complete = unit->cmds_acked; while (comm_pipe_has_data(unit->ui.back_pipe)) { - uaecptr locks, lockend; + uaecptr locks, lockend, lockv; int cnt = 0; locks = read_comm_pipe_int_blocking(unit->ui.back_pipe); lockend = locks; - while (trap_get_long(ctx, lockend) != 0) { - if (trap_get_long(ctx, lockend) == lockend) { + while ((lockv = trap_get_long(ctx, lockend)) != 0) { + if (lockv == lockend) { write_log(_T("filesystem lock queue corrupted!\n")); break; } - lockend = trap_get_long(ctx, lockend); + lockend = lockv; cnt++; } TRACE3((_T("message_lock: %d %x %x %x\n"), cnt, locks, lockend, trap_get_areg(ctx, 3))); @@ -7081,7 +7081,7 @@ static uae_u32 REGPARAM2 filesys_handler(TrapContext *ctx) dpacket packet; readdpacket(ctx, &packet, packet_addr); - if (! handle_packet(ctx, unit, &packet, 0, filesys_isvolume(ctx, unit))) { + if (! handle_packet(ctx, unit, &packet, 0, filesys_isvolume(unit))) { error: PUT_PCK_RES1 (&packet, DOS_FALSE); PUT_PCK_RES2 (&packet, ERROR_ACTION_NOT_KNOWN); @@ -7876,9 +7876,8 @@ static TCHAR *device_dupfix (TrapContext *ctx, uaecptr expbase, TCHAR *devname) return my_strdup (newname); } -static const TCHAR *dostypes (uae_u32 dostype) +static const TCHAR *dostypes(TCHAR *dt, uae_u32 dostype) { - static TCHAR dt[32]; int j; j = 0; @@ -7905,6 +7904,7 @@ static void dump_partinfo (struct hardfiledata *hfd, uae_u8 *pp) int lowcyl, highcyl; uae_u32 block, flags; uae_u8 buf[512]; + TCHAR dt[32]; flags = rl (pp + 20); pp[37 + pp[36]] = 0; @@ -7920,7 +7920,7 @@ static void dump_partinfo (struct hardfiledata *hfd, uae_u8 *pp) highcyl = rl (pp + 40); size = ((uae_u64)blocksize) * surfaces * spt * (highcyl - lowcyl + 1); - write_log (_T("Partition '%s' Dostype=%08X (%s) Flags: %08X\n"), s[0] ? s : _T("_NULL_"), dostype, dostypes (dostype), flags); + write_log (_T("Partition '%s' Dostype=%08X (%s) Flags: %08X\n"), s[0] ? s : _T("_NULL_"), dostype, dostypes (dt, dostype), flags); write_log (_T("BlockSize: %d, Surfaces: %d, SectorsPerBlock %d\n"), blocksize, surfaces, spb); write_log (_T("SectorsPerTrack: %d, Reserved: %d, LowCyl %d, HighCyl %d, Size %dM\n"), @@ -7934,7 +7934,7 @@ static void dump_partinfo (struct hardfiledata *hfd, uae_u8 *pp) } else { block = lowcyl * surfaces * spt; if (hdf_read (hfd, buf, (uae_u64)blocksize * block, sizeof buf)) { - write_log (_T("First block %d dostype: %08X (%s)\n"), block, rl (buf), dostypes (rl (buf))); + write_log (_T("First block %d dostype: %08X (%s)\n"), block, rl (buf), dostypes (dt, rl (buf))); } else { write_log (_T("First block %d read failed!\n"), block); } @@ -7965,6 +7965,8 @@ static void dumprdbblock(const uae_u8 *buf, int block) static void dump_rdb (UnitInfo *uip, struct hardfiledata *hfd, uae_u8 *bufrdb, uae_u8 *buf, int readblocksize) { + TCHAR dt[32]; + write_log (_T("RDB: HostID: %08x Flags: %08x\n"), rl (bufrdb + 3 * 4), rl (bufrdb + 5 * 4)); write_log (_T("RDB: BL: %d BH: %d LC: %d HC: %d CB: %d HB: %d\n"), @@ -8016,7 +8018,7 @@ static void dump_rdb (UnitInfo *uip, struct hardfiledata *hfd, uae_u8 *bufrdb, u uae_u32 dostype = rl (buf + 32); int version = (buf[36] << 8) | buf[37]; int revision = (buf[38] << 8) | buf[39]; - write_log (_T("LSEG: %08x (%s) %d.%d\n"), dostype, dostypes (dostype), version, revision); + write_log (_T("LSEG: %08x (%s) %d.%d\n"), dostype, dostypes (dt, dostype), version, revision); } } @@ -8025,6 +8027,7 @@ static void dump_rdb (UnitInfo *uip, struct hardfiledata *hfd, uae_u8 *bufrdb, u static int rdb_mount (TrapContext *ctx, UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacket) { int lastblock = 63, blocksize, readblocksize, badblock, driveinitblock; + TCHAR dt[32]; uae_u8 bufrdb[FILESYS_MAX_BLOCKSIZE], *buf = 0; uae_u8 *fsmem = 0; int rdblock, partblock, fileblock, lsegblock, i; @@ -8202,7 +8205,7 @@ static int rdb_mount (TrapContext *ctx, UnitInfo *uip, int unit_no, int partnum, for (;;) { if (fileblock == -1) { if (!fsnode) - write_log (_T("RDB: FS %08X (%s) not in FileSystem.resource or in RDB\n"), dostype, dostypes (dostype)); + write_log (_T("RDB: FS %08X (%s) not in FileSystem.resource or in RDB\n"), dostype, dostypes (dt, dostype)); goto error; } if (!legalrdbblock (uip, fileblock)) { @@ -8224,9 +8227,9 @@ static int rdb_mount (TrapContext *ctx, UnitInfo *uip, int unit_no, int partnum, newversion = (buf[36] << 8) | buf[37]; newrevision = (buf[38] << 8) | buf[39]; - write_log (_T("RDB: RDB filesystem %08X (%s) version %d.%d\n"), dostype, dostypes (dostype), newversion, newrevision); + write_log (_T("RDB: RDB filesystem %08X (%s) version %d.%d\n"), dostype, dostypes (dt, dostype), newversion, newrevision); if (fsnode) { - write_log (_T("RDB: %08X (%s) in FileSystem.resource version %d.%d\n"), dostype, dostypes (dostype), oldversion, oldrevision); + write_log (_T("RDB: %08X (%s) in FileSystem.resource version %d.%d\n"), dostype, dostypes (dt, dostype), oldversion, oldrevision); } if (newversion * 65536 + newrevision <= oldversion * 65536 + oldrevision && oldversion >= 0) { write_log (_T("RDB: FS in FileSystem.resource is newer or same, ignoring RDB filesystem\n")); @@ -8323,6 +8326,7 @@ static int dofakefilesys (TrapContext *ctx, UnitInfo *uip, uaecptr parmpacket, s { int i, size; TCHAR tmp[MAX_DPATH]; + TCHAR dt[32]; uae_u8 buf[512]; struct zfile *zf; int ver = -1, rev = -1; @@ -8370,14 +8374,14 @@ static int dofakefilesys (TrapContext *ctx, UnitInfo *uip, uaecptr parmpacket, s autofs = true; } if (tmp[0] == 0) { - write_log (_T("RDB: no filesystem for dostype 0x%08X (%s)\n"), dostype, dostypes (dostype)); + write_log (_T("RDB: no filesystem for dostype 0x%08X (%s)\n"), dostype, dostypes (dt, dostype)); addfakefilesys(ctx, parmpacket, dostype, ver, rev, ci); if ((dostype & 0xffffff00) == 0x444f5300) return FILESYS_HARDFILE; write_log (_T("RDB: mounted without filesys\n")); return FILESYS_HARDFILE; } - write_log (_T("RDB: fakefilesys, trying to load '%s', dostype 0x%08X (%s)\n"), tmp, dostype, dostypes (dostype)); + write_log (_T("RDB: fakefilesys, trying to load '%s', dostype 0x%08X (%s)\n"), tmp, dostype, dostypes (dt, dostype)); zf = zfile_fopen (tmp, _T("rb"), ZFD_NORMAL); if (!zf) { addfakefilesys(ctx, parmpacket, dostype, ver, rev, ci); @@ -8395,7 +8399,7 @@ static int dofakefilesys (TrapContext *ctx, UnitInfo *uip, uaecptr parmpacket, s if (fsdostype == dostype) { oldversion = trap_get_word(ctx, fsnode + 18); oldrevision = trap_get_word(ctx, fsnode + 20); - write_log (_T("RDB: %08X (%s) in FileSystem.resource version %d.%d\n"), dostype, dostypes (dostype), oldversion, oldrevision); + write_log (_T("RDB: %08X (%s) in FileSystem.resource version %d.%d\n"), dostype, dostypes(dt, dostype), oldversion, oldrevision); break; } fsnode = trap_get_long(ctx, fsnode); @@ -8460,7 +8464,7 @@ static int dofakefilesys (TrapContext *ctx, UnitInfo *uip, uaecptr parmpacket, s trap_put_long(ctx, parmpacket + PP_FSSIZE, uip->rdb_filesyssize); trap_put_long(ctx, parmpacket + PP_ADDTOFSRES, oldversion < 0 ? -1 : 0); addfakefilesys(ctx, parmpacket, dostype, ver, rev, ci); - write_log (_T("RDB: faked RDB filesystem %08X (%s %d.%d) loaded. ADD2FS=%d\n"), dostype, dostypes (dostype), ver, rev, oldversion < 0 ? 1 : 0); + write_log (_T("RDB: faked RDB filesystem %08X (%s %d.%d) loaded. ADD2FS=%d\n"), dostype, dostypes (dt, dostype), ver, rev, oldversion < 0 ? 1 : 0); return FILESYS_HARDFILE; } diff --git a/filesys_bootrom.cpp b/filesys_bootrom.cpp index 45c77e9c..1965712b 100644 --- a/filesys_bootrom.cpp +++ b/filesys_bootrom.cpp @@ -1,32 +1,32 @@ 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(0x62); - db(0x00); db(0x00); db(0x0a); db(0xc8); db(0x00); db(0x00); db(0x00); db(0xa8); + db(0x60); db(0x02); db(0x00); db(0x0b); db(0x60); db(0x00); db(0x0d); db(0x8c); + db(0x00); db(0x00); db(0x0a); db(0xf2); db(0x00); db(0x00); db(0x00); db(0xa8); db(0x00); db(0x00); db(0x03); db(0xe6); db(0x00); db(0x00); db(0x00); db(0x2c); - db(0x00); db(0x00); db(0x05); db(0x4c); db(0x00); db(0x00); db(0x1b); db(0xd0); - db(0x00); db(0x00); db(0x00); db(0x64); db(0x00); db(0x00); db(0x1c); db(0x2c); - db(0x00); db(0x00); db(0x1c); db(0x7e); db(0x43); db(0xfa); db(0x20); db(0x4e); + db(0x00); db(0x00); db(0x05); db(0x4c); db(0x00); db(0x00); db(0x1c); db(0x18); + db(0x00); db(0x00); db(0x00); db(0x64); db(0x00); db(0x00); db(0x1c); db(0x74); + db(0x00); db(0x00); db(0x1c); db(0xc6); db(0x43); db(0xfa); db(0x20); db(0x96); 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(0x00); db(0x00); db(0x00); db(0x07); db(0xe5); db(0x89); db(0x2e); db(0x01); - db(0x60); db(0x00); db(0x0d); db(0x18); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x60); db(0x00); db(0x0d); db(0x42); 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(0x20); db(0x2c); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x20); db(0x74); 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(0x1e); db(0xe2); - db(0x20); db(0x81); db(0x43); db(0xfa); db(0x20); db(0x04); db(0x70); db(0x00); + db(0x30); db(0x3c); db(0x3f); db(0xf8); db(0x61); db(0x00); db(0x1f); db(0x2a); + db(0x20); db(0x81); db(0x43); db(0xfa); db(0x20); db(0x4c); 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(0x1e); db(0xcc); db(0x20); db(0x81); - db(0x61); db(0x00); db(0x15); db(0x9e); db(0x61); db(0x00); db(0x19); db(0x64); + db(0x3f); db(0xf4); db(0x61); db(0x00); db(0x1f); db(0x14); db(0x20); db(0x81); + db(0x61); db(0x00); db(0x15); db(0xe4); db(0x61); db(0x00); db(0x19); db(0xac); 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(0x1e); db(0xaa); + db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x1e); db(0xf2); 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(0x1f); db(0xe3); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae); + db(0x20); db(0x2b); 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(0x1f); db(0xd3); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae); + db(0x20); db(0x1b); 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); @@ -43,7 +43,7 @@ db(0xbc); db(0x6d); db(0x01); db(0x0e); db(0x64); db(0x32); db(0x2f); db(0x06); db(0x2e); db(0x2d); db(0x01); db(0x10); db(0x4a); db(0x45); db(0x67); db(0x04); db(0x08); db(0xc7); db(0x00); db(0x02); db(0x2f); db(0x0b); db(0x20); db(0x4b); - db(0x61); db(0x00); db(0x09); db(0x66); db(0x26); db(0x5f); db(0x27); db(0x41); + db(0x61); db(0x00); db(0x09); db(0x90); db(0x26); db(0x5f); db(0x27); db(0x41); db(0x01); db(0xa4); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); db(0x60); db(0xd6); db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x60); db(0xc8); @@ -54,47 +54,47 @@ 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(0x1d); db(0xa6); db(0x4e); db(0x90); db(0x2a); db(0x00); + db(0x61); db(0x00); db(0x1d); db(0xee); 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(0x1f); db(0x05); db(0x4e); db(0xae); + db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x1f); db(0x4d); 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(0x1e); db(0x2b); db(0x43); db(0xfa); db(0x00); db(0x54); - db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0e); db(0xbc); db(0x22); db(0x40); + db(0x41); db(0xfa); db(0x1e); db(0x73); db(0x43); db(0xfa); db(0x00); db(0x54); + db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0f); db(0x02); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); - db(0x1d); db(0x50); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff); + db(0x1d); db(0x98); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x22); 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(0x1e); db(0x50); db(0x70); db(0x00); + db(0x24); db(0x48); db(0x43); db(0xfa); db(0x1e); db(0x98); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x67); db(0x14); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0xe4); db(0x8b); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x44); db(0x1c); 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(0x1d); db(0xf4); db(0x43); db(0xfa); db(0x00); db(0x16); + db(0x41); db(0xfa); db(0x1e); db(0x3c); db(0x43); db(0xfa); db(0x00); db(0x16); db(0x70); db(0x0f); db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00); db(0xff); db(0xa8); db(0x60); db(0xdc); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); db(0x72); db(0x02); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); - db(0x1c); db(0xd8); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); - db(0x61); db(0x00); db(0x0a); db(0x30); db(0x70); db(0x00); db(0x4e); db(0x75); + db(0x1d); db(0x20); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); + db(0x61); db(0x00); db(0x0a); db(0x5a); 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(0x1c); db(0xb0); db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x40); db(0x00); db(0x61); db(0x00); db(0x1c); db(0xa4); db(0x7c); db(0x03); + db(0x1c); db(0xf8); db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x40); db(0x00); db(0x61); db(0x00); db(0x1c); db(0xec); db(0x7c); db(0x03); db(0x4a); db(0x29); db(0x00); db(0x03); db(0x67); db(0x48); db(0x0c); db(0x29); db(0x00); db(0xfe); db(0x00); db(0x07); db(0x66); db(0x40); db(0x52); db(0x87); db(0x49); db(0xe8); db(0x00); db(0x50); db(0x4b); db(0xe9); db(0x00); db(0x04); db(0x48); db(0xe7); db(0x03); db(0xce); db(0x38); db(0x15); db(0x4c); db(0xec); db(0x07); db(0x00); db(0x00); db(0x04); db(0x4c); db(0xec); db(0x00); db(0x07); db(0x00); db(0x04); db(0x0c); db(0x44); db(0x00); db(0x12); db(0x66); db(0x06); - db(0x61); db(0x00); db(0x1b); db(0xe6); db(0x60); db(0x0a); db(0x0c); db(0x44); - db(0x00); db(0x13); db(0x66); db(0x04); db(0x61); db(0x00); db(0x1b); db(0xf4); + db(0x61); db(0x00); db(0x1c); db(0x2e); db(0x60); db(0x0a); db(0x0c); db(0x44); + db(0x00); db(0x13); db(0x66); db(0x04); db(0x61); db(0x00); db(0x1c); db(0x3c); db(0x4c); db(0xdf); db(0x73); db(0xc0); db(0x29); db(0x40); db(0x00); db(0x04); db(0x1b); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x03); db(0xd0); db(0xfc); db(0x20); db(0x00); db(0xd2); db(0xfc); db(0x00); db(0x08); db(0x51); db(0xce); @@ -102,7 +102,7 @@ db(0x60); db(0x00); db(0xff); db(0x84); 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(0x1c); db(0x26); db(0x20); db(0x07); db(0x4e); db(0x90); + db(0x61); db(0x00); db(0x1c); db(0x6e); db(0x20); db(0x07); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); db(0xff); db(0xe4); db(0x52); db(0x47); 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); @@ -125,10 +125,10 @@ 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(0x48); db(0xe7); db(0x00); db(0x20); db(0x4a); db(0x11); db(0x67); db(0x00); db(0x00); db(0xb4); - db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x1b); db(0x6a); + db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x1b); db(0xb2); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); - db(0xff); db(0x50); db(0x61); db(0x00); db(0x1b); db(0x54); db(0x70); db(0x02); + db(0xff); db(0x50); db(0x61); db(0x00); db(0x1b); db(0x9c); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x0c); db(0x40); db(0x00); db(0x01); db(0x6d); db(0x00); db(0x00); db(0x7c); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe4); db(0x0c); db(0x40); db(0x00); db(0x02); db(0x6e); db(0x08); @@ -146,20 +146,20 @@ db(0x00); db(0x18); db(0x25); db(0x49); db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x74); db(0x30); db(0x3c); db(0xff); db(0x50); - db(0x61); db(0x00); db(0x1a); db(0xc6); db(0x70); db(0x04); db(0x4e); db(0x90); + db(0x61); db(0x00); db(0x1b); db(0x0e); db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(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(0x1a); db(0xa8); db(0x20); db(0x02); db(0x24); db(0x03); db(0x4e); db(0x90); + db(0x1a); db(0xf0); 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(0x1a); db(0x7e); db(0x22); db(0xc8); db(0x30); db(0x3c); - db(0x3f); db(0xf0); db(0x61); db(0x00); db(0x1a); db(0x74); db(0x22); db(0xc8); + db(0x61); db(0x00); db(0x1a); db(0xc6); db(0x22); db(0xc8); db(0x30); db(0x3c); + db(0x3f); db(0xf0); db(0x61); db(0x00); db(0x1a); db(0xbc); 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(0x0d); db(0x29); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0x1b); db(0x55); 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(0x20); db(0x51); @@ -170,24 +170,24 @@ 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(0x06); db(0x24); db(0x48); db(0x74); db(0x00); + db(0x61); db(0x00); db(0x1a); db(0x4e); 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(0x1a); db(0xd0); db(0x43); db(0xfa); db(0xfd); db(0xb8); db(0x70); db(0x14); - db(0x61); db(0x00); db(0x0b); db(0x4e); db(0x24); db(0x00); db(0x76); db(0x00); + db(0x1b); db(0x18); db(0x43); db(0xfa); db(0xfd); db(0xb8); 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(0x1a); db(0xc6); db(0x43); db(0xfa); db(0xfd); db(0x14); db(0x70); db(0x19); - db(0x61); db(0x00); db(0x0b); db(0x36); db(0x26); db(0x00); db(0x70); db(0x2a); + db(0x1b); db(0x0e); db(0x43); db(0xfa); db(0xfd); db(0x14); 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(0x1a); db(0x74); db(0x23); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0x1a); db(0xbc); 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(0x10); 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(0x19); db(0x84); db(0x4e); db(0x90); - db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0x0b); db(0x36); + db(0x72); db(0x04); db(0x61); db(0x00); db(0x19); db(0xcc); 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(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbe); @@ -196,7 +196,7 @@ 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(0x19); db(0xf2); db(0x23); db(0x48); + db(0x22); db(0x48); db(0x41); db(0xfa); db(0x1a); db(0x3a); 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(0x7f); db(0x7e); @@ -234,13 +234,13 @@ 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(0x19); db(0x63); db(0x10); db(0x19); db(0x12); db(0x1a); + db(0x45); db(0xfa); db(0x19); db(0xab); 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(0x19); db(0x39); db(0x25); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x18); db(0x92); db(0x25); db(0x48); + db(0x00); db(0x08); db(0x41); db(0xfa); db(0x19); db(0x81); db(0x25); db(0x48); + db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x18); db(0xda); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88); db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee); db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a); @@ -319,466 +319,475 @@ db(0x00); db(0x14); db(0x67); db(0x0a); db(0x70); db(0x00); db(0x72); db(0x01); db(0x61); db(0x00); db(0xff); db(0xb2); db(0x4e); db(0x75); db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0xa8); db(0x4e); db(0x75); - db(0x10); db(0x2b); db(0x00); db(0xac); db(0x6b); db(0x0a); db(0x70); db(0x01); - db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); - db(0x72); db(0x01); db(0x0c); db(0x00); db(0x00); db(0xfe); db(0x66); db(0x02); - db(0x72); db(0x03); db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x86); - db(0x4e); db(0x75); db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); - db(0x67); db(0x0c); db(0x4a); db(0xa8); db(0x00); db(0x08); db(0x66); db(0x0a); - db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x04); db(0x70); db(0x01); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2a); db(0x48); - db(0x24); db(0x6c); db(0x00); db(0x18); db(0x2e); db(0x15); db(0x7a); db(0x00); - db(0x4a); db(0x87); db(0x67); db(0x70); db(0x20); db(0x0a); db(0x67); db(0x6c); - db(0x7c); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x08); db(0x67); db(0x12); - db(0x24); db(0x2a); db(0x00); db(0x04); db(0x2c); db(0x6b); db(0x00); db(0xa0); - db(0x4e); db(0xae); db(0xfc); db(0x34); db(0x4a); db(0x80); db(0x66); db(0x02); - db(0x50); db(0xc6); db(0x22); db(0x2d); db(0x00); db(0x0c); db(0x67); db(0x1c); - db(0x20); db(0x41); db(0x22); db(0x4a); db(0x2f); db(0x0a); db(0x45); db(0xec); - db(0x00); db(0x20); db(0x48); db(0x7a); db(0x00); db(0x08); db(0x2f); db(0x28); - db(0x00); db(0x08); db(0x4e); db(0x75); db(0x24); db(0x5f); db(0x4a); db(0x80); - db(0x66); db(0x02); db(0x50); db(0xc6); db(0x4a); db(0x06); db(0x67); db(0x24); - db(0x20); db(0x2a); db(0x00); db(0x04); db(0x90); db(0x8a); db(0x4a); db(0x92); - db(0x66); db(0x0a); db(0x20); db(0x05); db(0x67); db(0x10); db(0x20); db(0x40); - db(0x42); db(0x90); db(0x60); db(0x0a); db(0x20); db(0x52); db(0x22); db(0x4a); - db(0x22); db(0xd8); db(0x59); db(0x80); db(0x6a); db(0xfa); db(0x53); db(0x95); - db(0x53); db(0x87); db(0x60); db(0x94); db(0x2a); db(0x0a); db(0x24); db(0x52); - db(0x53); db(0x87); db(0x60); db(0x8c); db(0x4c); db(0xdf); db(0x7c); db(0xfc); - db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); db(0x4e); db(0x75); - db(0x61); db(0x00); db(0xfc); db(0x76); 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(0x14); db(0x88); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); - db(0x61); db(0x00); db(0x14); db(0x7e); 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(0xf7); db(0x1e); db(0x20); db(0x28); db(0x01); db(0x90); - db(0x67); db(0x14); db(0x6b); db(0x12); db(0x2f); db(0x08); db(0x72); db(0x01); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); db(0x4a); db(0x83); - db(0x6a); db(0x0e); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20); - db(0x61); db(0x00); db(0x14); db(0x3e); db(0x4e); db(0x90); db(0x60); db(0x26); - db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x61); db(0x00); db(0x0f); db(0x9e); - 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(0x24); 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(0x61); db(0x00); db(0xfa); db(0xe6); - db(0x48); db(0xe7); db(0x80); db(0xc0); db(0x20); db(0x29); db(0x01); db(0x90); - db(0x22); db(0x69); db(0x01); db(0x94); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4c); db(0xdf); db(0x03); db(0x01); - db(0x42); db(0xa9); db(0x01); db(0x90); db(0x23); db(0x48); db(0x01); db(0x94); - db(0x4a); db(0x80); db(0x67); db(0x0a); db(0x4a); db(0xa9); db(0x01); db(0x98); - db(0x67); db(0x04); db(0x61); db(0x00); db(0xfa); db(0x62); db(0x4a); db(0x83); - db(0x6b); db(0x00); db(0xf6); db(0x86); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x2f); db(0x09); db(0x43); db(0xfa); db(0x15); db(0x45); 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(0x13); db(0xb4); 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(0xf4); db(0x38); db(0x70); db(0xff); - db(0x22); db(0x0c); db(0x66); db(0x06); db(0x41); db(0xfa); db(0xf4); db(0x76); - db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x24); db(0x20); db(0x08); - db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x20); db(0x08); db(0x07); - db(0x00); db(0x03); db(0x66); db(0x48); db(0x08); db(0x07); db(0x00); db(0x00); - db(0x67); db(0x42); db(0x0c); db(0x03); db(0x00); db(0x80); db(0x67); db(0x3c); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x14); 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(0x30); db(0x3c); db(0x10); db(0x00); db(0x80); db(0x03); - db(0x33); db(0x40); db(0x00); db(0x08); db(0x23); db(0x6d); db(0x01); db(0x04); - db(0x00); db(0x0a); db(0x23); db(0x4b); db(0x00); db(0x10); db(0x41); db(0xec); - db(0x00); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x4e); db(0xae); - db(0xfe); db(0xf2); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x72); db(0x00); - db(0x70); db(0x00); db(0x4e); db(0x75); db(0x76); db(0x00); db(0x24); db(0x49); - db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); db(0x08); db(0x07); - db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); db(0x00); db(0x02); - db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0x80); db(0x2c); db(0x4c); - db(0x61); db(0x00); db(0x0f); db(0x3a); db(0x08); db(0x07); db(0x00); db(0x01); - db(0x67); db(0x6a); db(0x08); db(0x07); db(0x00); db(0x02); db(0x66); db(0x64); - db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); db(0x4a); db(0x30); - db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x06); db(0x82); db(0x00); db(0x00); db(0x10); db(0x04); db(0x20); db(0x02); - db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); - db(0x67); db(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(0x13); db(0xea); 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(0x2c); db(0x78); db(0x00); db(0x04); - db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); db(0x20); db(0x02); - db(0x4e); db(0xae); db(0xff); db(0x2e); db(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(0x13); db(0xdb); 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(0x13); db(0xc9); 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(0x40); db(0x4a); db(0x80); - db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0xa8); db(0x48); db(0xe7); - db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfd); db(0xbc); db(0x4c); db(0xdf); - db(0x51); db(0x00); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); - db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); - db(0x60); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x02); db(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(0x20); 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(0x13); db(0x7c); db(0x00); db(0x01); - db(0x00); db(0x1e); db(0x4e); db(0xae); 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(0x00); db(0x4e); db(0xae); - db(0xfe); db(0x68); db(0x24); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x7c); db(0x00); - db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04); db(0x27); db(0x46); - db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0); db(0x50); db(0xeb); - db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); - db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); db(0x11); db(0xb8); - db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0xc8); - db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x11); db(0xb5); - db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0xb8); - 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(0x11); db(0x6e); db(0x70); db(0x00); db(0x4e); db(0x90); - db(0x24); db(0x00); db(0x70); db(0x01); db(0x61); db(0x00); db(0xf9); db(0xb8); - db(0x08); db(0x02); db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); - db(0x61); db(0x00); db(0xfb); db(0x20); db(0x60); db(0x00); db(0x01); db(0x44); - db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); - db(0x4a); db(0x80); db(0x66); db(0x10); db(0x70); db(0x00); db(0x12); db(0x2d); - db(0x00); db(0x0f); db(0x03); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x08); db(0x2b); db(0x00); db(0x00); - db(0x00); db(0xad); db(0x67); db(0x0a); db(0x61); db(0x00); db(0xff); db(0x04); - db(0x08); db(0xab); db(0x00); db(0x00); db(0x00); db(0xad); db(0x08); db(0x2b); - db(0x00); db(0x01); db(0x00); db(0xad); db(0x67); db(0x0a); db(0x61); db(0x00); - db(0x0c); db(0x26); 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(0x04); db(0x70); db(0x01); - db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); - db(0xfb); db(0x98); db(0x42); db(0x2b); db(0x00); db(0xac); db(0x30); db(0x3c); - db(0xff); db(0x58); db(0x61); db(0x00); db(0x10); db(0xec); 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(0x0c); db(0x6c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3c); - db(0x20); db(0x6c); db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); - db(0x02); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); - db(0x80); db(0x00); db(0x00); db(0x08); db(0x66); db(0x1a); db(0x02); db(0xa8); - db(0x7f); db(0xff); db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); - db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); - db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x4a); - db(0x22); db(0x4c); db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); - 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(0x10); db(0x78); 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(0x00); db(0xc0); db(0x28); db(0x68); db(0x00); db(0x0a); db(0x61); db(0x4a); - db(0x53); db(0x85); db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x89); - db(0x20); db(0x49); db(0x60); db(0xd8); db(0x24); db(0x48); db(0x20); db(0x49); - 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(0x24); 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(0xfe); db(0xb8); db(0x0c); db(0xac); db(0x00); db(0x00); db(0x00); db(0x1f); - db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); db(0xfa); db(0x80); - 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(0xae); db(0x66); db(0x0e); - db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x0f); db(0xe2); - 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(0x24); db(0x53); db(0x2e); db(0x0a); db(0x22); db(0x0a); db(0x67); db(0x00); - db(0x00); db(0x0c); db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); - db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); - db(0x24); db(0x47); db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); - db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); - db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); - db(0x20); db(0x10); db(0x67); db(0x18); db(0x70); db(0x00); db(0x22); db(0x80); - db(0x22); db(0x4a); db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); - db(0x20); db(0x0a); db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); - db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90); db(0x42); db(0xa8); - db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x91); db(0xc8); - db(0x24); db(0x00); db(0x6b); db(0x32); db(0x70); db(0x22); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x91); db(0xc8); db(0x24); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x1e); - db(0x15); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x08); db(0x15); db(0x42); - db(0x00); db(0x0f); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); - db(0x25); db(0x40); db(0x00); db(0x10); db(0x41); db(0xea); db(0x00); db(0x14); - db(0x61); db(0x00); db(0xff); db(0xb0); db(0x20); db(0x4a); db(0x20); db(0x08); - db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4a); db(0x80); - db(0x67); db(0x24); db(0x24); db(0x40); db(0x24); db(0x01); db(0x66); db(0x02); - db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x20); db(0x2b); db(0x00); db(0xb8); db(0x0c); db(0x80); db(0xff); db(0xff); + db(0xff); db(0xff); db(0x67); db(0x18); db(0x20); db(0x6b); db(0x00); db(0xb4); + db(0x20); db(0x68); db(0x00); db(0x1c); db(0xd1); db(0xc8); db(0xd1); db(0xc8); + db(0x20); db(0x68); db(0x00); db(0x08); db(0xd1); db(0xc8); db(0xd1); db(0xc8); + db(0x21); db(0x40); db(0x00); db(0x28); db(0x4e); db(0x75); db(0x61); db(0x00); + db(0xff); db(0xd8); db(0x10); db(0x2b); db(0x00); db(0xac); db(0x6b); db(0x0a); + db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0x6e); + db(0x4e); db(0x75); db(0x72); db(0x01); db(0x0c); db(0x00); db(0x00); db(0xfe); + db(0x66); db(0x02); db(0x72); db(0x03); db(0x70); db(0x00); db(0x61); db(0x00); + db(0xff); db(0x5c); db(0x4e); db(0x75); db(0x20); db(0x6c); db(0x00); db(0x24); + db(0x4a); db(0x90); db(0x67); db(0x0c); db(0x4a); db(0xa8); db(0x00); db(0x08); + db(0x66); db(0x0a); db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x04); + db(0x70); db(0x01); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); + db(0x2a); db(0x48); db(0x24); db(0x6c); db(0x00); db(0x18); db(0x2e); db(0x15); + db(0x7a); db(0x00); db(0x4a); db(0x87); db(0x67); db(0x70); db(0x20); db(0x0a); + db(0x67); db(0x6c); db(0x7c); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x08); + db(0x67); db(0x12); db(0x24); db(0x2a); db(0x00); db(0x04); db(0x2c); db(0x6b); + db(0x00); db(0xa0); db(0x4e); db(0xae); db(0xfc); db(0x34); db(0x4a); db(0x80); + db(0x66); db(0x02); db(0x50); db(0xc6); db(0x22); db(0x2d); db(0x00); db(0x0c); + db(0x67); db(0x1c); db(0x20); db(0x41); db(0x22); db(0x4a); db(0x2f); db(0x0a); + db(0x45); db(0xec); db(0x00); db(0x20); db(0x48); db(0x7a); db(0x00); db(0x08); + db(0x2f); db(0x28); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x24); db(0x5f); + db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); db(0x4a); db(0x06); + db(0x67); db(0x24); db(0x20); db(0x2a); db(0x00); db(0x04); db(0x90); db(0x8a); + db(0x4a); db(0x92); db(0x66); db(0x0a); db(0x20); db(0x05); db(0x67); db(0x10); + db(0x20); db(0x40); db(0x42); db(0x90); db(0x60); db(0x0a); db(0x20); db(0x52); + db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x80); db(0x6a); db(0xfa); + db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x94); db(0x2a); db(0x0a); + db(0x24); db(0x52); db(0x53); db(0x87); db(0x60); db(0x8c); db(0x4c); db(0xdf); + db(0x7c); db(0xfc); db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); + db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfc); db(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(0x14); db(0xa6); db(0x2a); db(0x50); db(0x30); db(0x3c); + db(0xff); db(0x28); db(0x61); db(0x00); db(0x14); db(0x9c); 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(0xf4); db(0x20); db(0x28); + db(0x01); db(0x90); db(0x67); db(0x14); db(0x6b); db(0x12); db(0x2f); db(0x08); + db(0x72); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); + db(0x4a); db(0x83); db(0x6a); db(0x0e); db(0x22); db(0x48); db(0x30); db(0x3c); + db(0xff); db(0x20); db(0x61); db(0x00); db(0x14); db(0x5c); db(0x4e); db(0x90); + db(0x60); db(0x26); db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x61); db(0x00); + db(0x0f); db(0xbc); 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(0x42); + 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(0x61); db(0x00); + db(0xfa); db(0xbc); db(0x48); db(0xe7); db(0x80); db(0xc0); db(0x20); db(0x29); + db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4c); db(0xdf); + db(0x03); db(0x01); db(0x42); db(0xa9); db(0x01); db(0x90); db(0x23); db(0x48); + db(0x01); db(0x94); db(0x4a); db(0x80); db(0x67); db(0x0a); 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(0x5c); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x2f); db(0x09); db(0x43); db(0xfa); db(0x15); db(0x63); + 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(0x13); db(0xd2); + 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(0xf4); db(0x0e); + db(0x70); db(0xff); db(0x22); db(0x0c); db(0x66); db(0x06); db(0x41); db(0xfa); + db(0xf4); db(0x4c); db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x24); + db(0x20); db(0x08); db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x20); + db(0x08); db(0x07); db(0x00); db(0x03); db(0x66); db(0x48); db(0x08); db(0x07); + db(0x00); db(0x00); db(0x67); db(0x42); db(0x0c); db(0x03); db(0x00); db(0x80); + db(0x67); db(0x3c); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x14); + 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(0x30); db(0x3c); db(0x10); db(0x00); + db(0x80); db(0x03); db(0x33); db(0x40); db(0x00); db(0x08); db(0x23); db(0x6d); + db(0x01); db(0x04); db(0x00); db(0x0a); db(0x23); db(0x4b); db(0x00); db(0x10); + db(0x41); db(0xec); db(0x00); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x4e); db(0xae); db(0xff); db(0x76); + db(0x72); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x76); db(0x00); + db(0x24); db(0x49); db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); + db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); + db(0x00); db(0x02); db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0x80); + db(0x2c); db(0x4c); db(0x61); db(0x00); db(0x0f); db(0x58); db(0x08); db(0x07); + db(0x00); db(0x01); db(0x67); db(0x6a); db(0x08); db(0x07); db(0x00); db(0x02); + db(0x66); db(0x64); db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); + db(0x4a); db(0x30); db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x06); db(0x82); db(0x00); db(0x00); db(0x10); db(0x04); + db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x4a); db(0x80); db(0x67); db(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(0x08); 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(0x2c); db(0x78); + db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); + db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(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(0x13); db(0xf9); 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(0x13); db(0xe7); 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(0x40); - db(0x11); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x08); db(0x31); db(0x42); - db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); db(0x4a); db(0x80); - db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x30); db(0x22); db(0x24); db(0x48); db(0x24); db(0x00); db(0x26); db(0x01); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x6a); - db(0x22); db(0x03); db(0x61); db(0x00); db(0xff); db(0xb2); db(0x67); db(0x18); - db(0x20); db(0x4a); db(0x22); db(0x40); db(0x24); db(0x40); db(0x20); db(0x02); - db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x22); db(0x00); - db(0x70); db(0x00); db(0x4a); db(0x81); db(0x66); db(0x02); db(0x20); db(0x0a); - db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x0c); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x28); db(0x00); db(0x24); db(0x08); db(0x26); db(0x09); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x08); db(0x5c); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); - db(0x67); db(0x00); db(0x00); db(0x34); db(0x24); db(0x40); db(0x15); db(0x7c); - db(0x00); db(0x01); db(0x00); db(0x08); db(0x15); db(0x44); db(0x00); db(0x09); - db(0x25); db(0x42); db(0x00); db(0x0a); db(0x47); db(0xea); db(0x00); db(0x5c); - db(0x25); db(0x4b); db(0x00); db(0x3a); db(0x47); db(0xeb); db(0x08); db(0x00); - db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b); db(0x00); db(0x36); - db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); db(0x24); db(0x09); - db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); db(0x4c); db(0xdf); - db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x0e); db(0xe0); - db(0x43); db(0xfa); db(0x01); db(0x30); db(0x70); db(0x13); db(0x61); db(0x00); - db(0xff); db(0x98); db(0x4e); db(0x75); db(0x22); db(0x6d); db(0x02); db(0x0c); - db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); + db(0x4a); db(0x80); db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0xa8); + db(0x48); db(0xe7); db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfd); db(0xbc); + db(0x4c); db(0xdf); db(0x51); db(0x00); db(0x0c); db(0x80); db(0xff); db(0xff); + db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); + db(0x48); db(0x46); db(0x60); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x02); db(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(0x3e); 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(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x25); db(0x69); db(0x00); db(0x20); - db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); - db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); - db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); - db(0x42); db(0xaa); db(0x00); db(0x0e); db(0x42); db(0xaa); db(0x00); db(0x12); - db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); - db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0xf8); db(0xfe); db(0x2a); db(0x48); db(0x95); db(0xca); - db(0x97); db(0xcb); db(0x99); db(0xcc); db(0x78); db(0x00); db(0x2c); db(0x6d); - db(0x00); db(0x18); db(0x20); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x28); - db(0x00); db(0x3c); db(0x67); db(0x5c); db(0x20); db(0x40); db(0x41); db(0xe8); - db(0x00); db(0x2c); db(0x28); db(0x48); db(0x4e); db(0xae); db(0xfc); db(0xe8); - db(0x72); db(0xff); db(0x74); db(0xff); db(0xb2); db(0x80); db(0x67); db(0x48); - db(0x26); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x41); db(0xed); - db(0x00); db(0xc0); db(0x70); db(0x66); db(0x4e); db(0xae); db(0xff); db(0x7c); - db(0x41); db(0xed); db(0x00); db(0xc0); db(0x38); db(0x28); db(0x00); db(0x64); - db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x91); db(0xc8); db(0x43); db(0xed); - db(0x00); db(0x38); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); - db(0x22); db(0x3c); db(0x80); db(0x00); db(0x10); db(0x00); db(0x24); db(0x03); - db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x72); db(0xff); db(0x74); db(0xff); - db(0x4a); db(0x80); db(0x6b); db(0x0c); db(0x45); db(0xed); db(0x00); db(0x38); - db(0x22); db(0x2a); db(0x00); db(0x32); db(0x24); db(0x2a); db(0x00); db(0x36); - db(0x20); db(0x2c); db(0x00); db(0x1c); db(0xb8); db(0x6d); db(0x00); db(0x2c); - db(0x66); db(0x12); db(0xb0); db(0xad); db(0x00); db(0x28); db(0x66); db(0x0c); - db(0xb2); db(0xad); db(0x00); db(0x20); db(0x66); db(0x06); db(0xb4); db(0xad); - db(0x00); db(0x24); db(0x67); db(0x40); db(0x2b); db(0x40); db(0x00); db(0x28); - db(0x2b); db(0x41); db(0x00); db(0x20); db(0x2b); db(0x42); db(0x00); db(0x24); - db(0x3b); db(0x44); db(0x00); db(0x2c); db(0x91); db(0xc8); db(0x43); db(0xed); - db(0x00); db(0x90); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); - db(0x22); db(0x3c); db(0x80); db(0x00); db(0x00); db(0x00); db(0x24); db(0x03); - db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04); - db(0x47); db(0xed); db(0x00); db(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(0x18); 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(0xfe); db(0xda); db(0x24); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4a); - 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(0x0c); db(0xd4); 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(0x0c); db(0xae); 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(0x34); db(0x23); db(0x48); db(0x00); db(0x0a); - db(0x41); db(0xfa); db(0x03); db(0x14); 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(0x0d); db(0x84); 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(0x46); 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(0x6e); 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(0x1c); 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(0x10); + 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(0x1e); + 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(0x11); db(0xee); 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(0x46); + db(0x00); db(0x04); db(0x27); db(0x46); db(0x00); db(0x08); db(0x27); db(0x4a); + db(0x00); db(0xa0); db(0x50); db(0xeb); db(0x00); db(0x9e); db(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(0x11); db(0xbe); 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(0x11); db(0xbb); 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(0x11); db(0x74); 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(0x61); db(0x00); + db(0xfa); db(0xda); db(0x60); db(0x00); db(0x01); db(0x44); db(0x20); db(0x4d); + db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x4a); db(0x80); + db(0x66); db(0x10); db(0x70); db(0x00); db(0x12); db(0x2d); db(0x00); db(0x0f); + db(0x03); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); + db(0xfe); db(0xc2); db(0x08); db(0x2b); db(0x00); db(0x00); db(0x00); db(0xad); + db(0x67); db(0x0a); db(0x61); db(0x00); db(0xfe); db(0xe8); db(0x08); db(0xab); + db(0x00); db(0x00); db(0x00); db(0xad); db(0x08); db(0x2b); db(0x00); db(0x01); + db(0x00); db(0xad); db(0x67); db(0x0a); db(0x61); db(0x00); db(0x0c); db(0x28); + 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(0x06); 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(0x10); db(0xee); 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(0x0c); db(0x6c); + db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3c); db(0x20); db(0x6c); + db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); db(0x02); db(0x80); + db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); db(0x80); db(0x00); + db(0x00); db(0x08); db(0x66); db(0x1a); db(0x02); db(0xa8); db(0x7f); db(0xff); + db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); db(0x00); db(0x10); + db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); db(0x4e); db(0xae); + db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x4a); db(0x22); db(0x4c); + db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); 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(0x10); db(0x7a); + 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(0x00); db(0xc0); + db(0x28); db(0x68); db(0x00); db(0x0a); db(0x61); db(0x4a); db(0x53); db(0x85); + db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x89); db(0x20); db(0x49); + db(0x60); db(0xd8); db(0x24); db(0x48); db(0x20); db(0x49); 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(0x26); 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(0xfe); db(0xb8); + db(0x0c); db(0xac); db(0x00); db(0x00); db(0x00); db(0x1f); db(0x00); db(0x08); + db(0x66); db(0x04); db(0x61); db(0x00); db(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(0x0f); db(0xe4); 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(0x24); db(0x53); + db(0x2e); db(0x0a); db(0x22); db(0x0a); db(0x67); db(0x00); db(0x00); db(0x0c); + db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); db(0x24); db(0x52); + db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); db(0x24); db(0x47); + db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); db(0x2e); db(0x0a); + db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); db(0x20); db(0x40); + db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x20); db(0x10); + db(0x67); db(0x18); db(0x70); db(0x00); db(0x22); db(0x80); db(0x22); db(0x4a); + db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a); + db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75); + db(0x20); db(0x88); db(0x58); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); + db(0x21); db(0x48); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x91); db(0xc8); db(0x24); db(0x00); + db(0x6b); db(0x32); db(0x70); db(0x22); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x91); db(0xc8); + db(0x24); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x15); db(0x7c); + db(0x00); db(0x04); db(0x00); db(0x08); db(0x15); db(0x42); db(0x00); db(0x0f); + db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x25); db(0x40); + db(0x00); db(0x10); db(0x41); db(0xea); db(0x00); db(0x14); db(0x61); db(0x00); + db(0xff); db(0xb0); db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); + db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x24); + db(0x24); db(0x40); db(0x24); db(0x01); db(0x66); db(0x02); db(0x74); db(0x30); + db(0x20); db(0x02); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x11); db(0x7c); + db(0x00); db(0x0a); db(0x00); db(0x08); db(0x31); db(0x42); db(0x00); db(0x12); + db(0x21); db(0x4a); db(0x00); db(0x0e); db(0x4a); db(0x80); db(0x4c); db(0xdf); + db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x30); db(0x22); + db(0x24); db(0x48); db(0x24); db(0x00); db(0x26); db(0x01); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x6a); db(0x22); db(0x03); + db(0x61); db(0x00); db(0xff); db(0xb2); db(0x67); db(0x18); db(0x20); db(0x4a); + db(0x22); db(0x40); db(0x24); db(0x40); db(0x20); db(0x02); db(0x72); db(0x00); + db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x22); db(0x00); db(0x70); db(0x00); + db(0x4a); db(0x81); db(0x66); db(0x02); db(0x20); db(0x0a); db(0x4a); db(0x80); + db(0x4c); db(0xdf); db(0x44); db(0x0c); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x38); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x28); db(0x00); + db(0x24); db(0x08); db(0x26); db(0x09); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x08); db(0x5c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0x00); db(0x34); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x01); + db(0x00); db(0x08); db(0x15); db(0x44); db(0x00); db(0x09); db(0x25); db(0x42); + db(0x00); db(0x0a); db(0x47); db(0xea); db(0x00); db(0x5c); db(0x25); db(0x4b); + db(0x00); db(0x3a); db(0x47); db(0xeb); db(0x08); db(0x00); db(0x25); db(0x4b); + db(0x00); db(0x3e); db(0x25); db(0x4b); db(0x00); db(0x36); db(0x22); db(0x4a); + db(0x24); db(0x43); db(0x97); db(0xcb); db(0x24); db(0x09); db(0x4e); db(0xae); + db(0xfe); db(0xe6); db(0x20); db(0x02); db(0x4c); db(0xdf); db(0x4c); db(0x1c); + db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x0e); db(0xe2); db(0x43); db(0xfa); + db(0x01); db(0x30); db(0x70); db(0x13); db(0x61); db(0x00); db(0xff); db(0x98); + db(0x4e); db(0x75); db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x33); db(0x7c); + db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); + db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6d); + db(0x02); db(0x0c); db(0x25); db(0x69); db(0x00); db(0x20); db(0x00); db(0x0e); + db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6d); + db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x42); db(0xaa); + db(0x00); db(0x0e); db(0x42); db(0xaa); db(0x00); db(0x12); db(0x22); db(0x6d); + db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0xf8); db(0xfe); db(0x2a); db(0x48); db(0x95); db(0xca); db(0x97); db(0xcb); + db(0x99); db(0xcc); db(0x78); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x18); + db(0x20); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x28); db(0x00); db(0x3c); + db(0x67); db(0x5c); db(0x20); db(0x40); db(0x41); db(0xe8); db(0x00); db(0x2c); + db(0x28); db(0x48); db(0x4e); db(0xae); db(0xfc); db(0xe8); db(0x72); db(0xff); + db(0x74); db(0xff); db(0xb2); db(0x80); db(0x67); db(0x48); db(0x26); db(0x00); + db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x41); db(0xed); db(0x00); db(0xc0); + db(0x70); db(0x66); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xed); + db(0x00); db(0xc0); db(0x38); db(0x28); db(0x00); db(0x64); db(0x2c); db(0x6d); + db(0x00); db(0x18); db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x38); + db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); + db(0x80); db(0x00); db(0x10); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); + db(0xfd); db(0x0c); db(0x72); db(0xff); db(0x74); db(0xff); db(0x4a); db(0x80); + db(0x6b); db(0x0c); db(0x45); db(0xed); db(0x00); db(0x38); db(0x22); db(0x2a); + db(0x00); db(0x32); db(0x24); db(0x2a); db(0x00); db(0x36); db(0x20); db(0x2c); + db(0x00); db(0x1c); db(0xb8); db(0x6d); db(0x00); db(0x2c); db(0x66); db(0x12); + db(0xb0); db(0xad); db(0x00); db(0x28); db(0x66); db(0x0c); db(0xb2); db(0xad); + db(0x00); db(0x20); db(0x66); db(0x06); db(0xb4); db(0xad); db(0x00); db(0x24); + db(0x67); db(0x40); db(0x2b); db(0x40); db(0x00); db(0x28); db(0x2b); db(0x41); + db(0x00); db(0x20); db(0x2b); db(0x42); db(0x00); db(0x24); db(0x3b); db(0x44); + db(0x00); db(0x2c); db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x90); + db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); + db(0x80); db(0x00); db(0x00); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); + db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04); db(0x47); db(0xed); + db(0x00); db(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(0x1a); + 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(0xfe); db(0xda); + db(0x24); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4a); 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(0x0c); db(0xd6); 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(0x0c); db(0xb0); 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(0x36); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); + db(0x03); db(0x14); 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(0x0d); db(0x86); 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(0x48); 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(0x70); 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(0x1e); 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(0x12); 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(0x0b); db(0xfe); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0xfd); db(0x0c); db(0x2b); db(0x40); db(0x02); db(0x08); db(0x67); db(0x00); + db(0x02); db(0x38); 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(0x0b); db(0xdd); 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(0x0b); db(0xfc); db(0x70); db(0x00); db(0x72); db(0x00); - db(0x61); db(0x00); db(0xfd); db(0x0c); db(0x2b); db(0x40); db(0x02); db(0x08); - db(0x67); db(0x00); db(0x02); db(0x38); 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(0x0b); db(0xdb); 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(0x0b); db(0xc7); db(0x70); db(0x00); - db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xca); db(0x2b); db(0x40); - db(0x02); db(0x0c); db(0x67); db(0x00); db(0x01); db(0xf6); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); db(0x0b); db(0x92); - 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(0x20); db(0x4b); db(0x61); db(0x00); db(0xfd); db(0x8c); db(0x70); db(0x32); - db(0x27); db(0x40); db(0x00); db(0x34); db(0x22); db(0x6d); db(0x02); db(0x08); - db(0x45); db(0xed); db(0x01); db(0x3c); db(0x33); db(0x7c); db(0x00); db(0x0b); - db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); - db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); db(0x10); db(0x2c); - db(0x00); db(0x00); db(0x0c); db(0x47); db(0x00); db(0x27); db(0x65); db(0x00); - db(0x01); db(0x52); db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x00); - db(0x01); db(0x4a); db(0x41); db(0xed); db(0x01); db(0x68); db(0x25); db(0x48); - db(0x00); db(0x0a); db(0x15); db(0x7c); db(0x00); db(0x13); db(0x00); db(0x04); - db(0x15); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x05); db(0x42); db(0x90); - db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0xa8); db(0x00); db(0x08); - db(0x42); db(0x68); db(0x00); db(0x0c); db(0x42); db(0x6a); db(0x00); db(0x06); - db(0x61); db(0x00); db(0x01); db(0x72); db(0x31); db(0x6c); db(0x00); db(0x0a); - db(0x00); db(0x0e); db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x6c); - db(0x00); db(0x0c); db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); - db(0x31); db(0x6c); db(0x00); db(0x04); db(0x00); db(0x16); db(0x42); db(0x68); - db(0x00); db(0x18); db(0x31); db(0x6c); db(0x00); db(0x06); db(0x00); db(0x1a); - db(0x43); db(0xed); db(0x01); db(0x88); db(0x21); db(0x49); db(0x00); db(0x1c); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x06); db(0x30); db(0x2c); - db(0x00); db(0x20); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x07); db(0x22); db(0xec); - db(0x00); db(0x22); db(0x70); db(0x00); db(0x30); db(0x2c); db(0x00); db(0x10); - db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); - db(0x22); db(0xc0); db(0x30); db(0x2c); db(0x00); db(0x12); db(0x6b); db(0x08); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); - db(0x30); db(0x2c); db(0x00); db(0x08); db(0x6b); db(0x14); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x2c); - db(0x00); db(0x0e); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); - db(0x22); db(0xc0); db(0x30); db(0x2c); db(0x00); db(0x14); db(0x6b); db(0x10); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x2c); - db(0x00); db(0x1a); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); - db(0x30); db(0x2c); db(0x00); db(0x16); db(0x6b); db(0x10); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x04); db(0x30); db(0x2c); db(0x00); db(0x1c); + db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00); db(0xff); db(0x32); + db(0x41); db(0xfa); db(0x0b); db(0xc9); db(0x70); db(0x00); db(0x72); db(0x00); + db(0x61); db(0x00); db(0xfc); db(0xca); db(0x2b); db(0x40); db(0x02); db(0x0c); + db(0x67); db(0x00); db(0x01); db(0xf6); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x00); db(0x61); db(0x00); db(0x0b); db(0x94); 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(0x20); db(0x4b); + db(0x61); db(0x00); db(0xfd); db(0x8c); db(0x70); db(0x32); db(0x27); db(0x40); + db(0x00); db(0x34); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x45); db(0xed); + db(0x01); db(0x3c); db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); + db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); db(0x00); db(0x24); + db(0x23); db(0x4a); db(0x00); db(0x28); db(0x10); db(0x2c); db(0x00); db(0x00); + db(0x0c); db(0x47); db(0x00); db(0x27); db(0x65); db(0x00); db(0x01); db(0x52); + db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x00); db(0x01); db(0x4a); + db(0x41); db(0xed); db(0x01); db(0x68); db(0x25); db(0x48); db(0x00); db(0x0a); + db(0x15); db(0x7c); db(0x00); db(0x13); db(0x00); db(0x04); db(0x15); db(0x7c); + db(0x00); db(0x03); db(0x00); db(0x05); db(0x42); db(0x90); db(0x42); db(0xa8); + db(0x00); db(0x04); db(0x42); db(0xa8); db(0x00); db(0x08); db(0x42); db(0x68); + db(0x00); db(0x0c); db(0x42); db(0x6a); db(0x00); db(0x06); db(0x61); db(0x00); + db(0x01); db(0x72); db(0x31); db(0x6c); db(0x00); db(0x0a); db(0x00); db(0x0e); + db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x6c); db(0x00); db(0x0c); + db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); db(0x31); db(0x6c); + db(0x00); db(0x04); db(0x00); db(0x16); db(0x42); db(0x68); db(0x00); db(0x18); + db(0x31); db(0x6c); db(0x00); db(0x06); db(0x00); db(0x1a); db(0x43); db(0xed); + db(0x01); db(0x88); db(0x21); db(0x49); db(0x00); db(0x1c); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x06); db(0x30); db(0x2c); db(0x00); db(0x20); + db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x07); db(0x22); db(0xec); db(0x00); db(0x22); + db(0x70); db(0x00); db(0x30); db(0x2c); db(0x00); db(0x10); db(0x6b); db(0x08); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); db(0x22); db(0xc0); + db(0x30); db(0x2c); db(0x00); db(0x12); db(0x6b); db(0x08); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); db(0x30); db(0x2c); + db(0x00); db(0x08); db(0x6b); db(0x14); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x2c); db(0x00); db(0x0e); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); db(0x22); db(0xc0); + db(0x30); db(0x2c); db(0x00); db(0x14); db(0x6b); db(0x10); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x2c); db(0x00); db(0x1a); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x2c); - db(0x00); db(0x18); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x05); db(0x30); db(0x2c); db(0x00); db(0x1e); db(0x48); db(0xc0); - db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x2c); - db(0x00); db(0x26); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x08); db(0x22); db(0xc0); db(0x42); db(0x91); db(0x61); db(0x00); - db(0xfc); db(0x40); db(0x36); db(0x3c); db(0x00); db(0x68); db(0x74); db(0x01); - db(0x28); db(0x2c); db(0x00); db(0x22); db(0x20); db(0x04); db(0xc0); db(0x82); - db(0x22); db(0x2b); db(0x00); db(0x04); db(0xc2); db(0x82); db(0xb2); db(0x80); - db(0x67); db(0x22); db(0x42); db(0x92); db(0x35); db(0x7c); db(0x02); db(0x00); - db(0x00); db(0x04); db(0x42); db(0xaa); db(0x00); db(0x0a); db(0x32); db(0x03); - db(0x4a); db(0x00); db(0x66); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x07); - db(0x35); db(0x41); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); - db(0x61); db(0x00); db(0xfc); db(0x06); db(0x52); db(0x43); db(0xd4); db(0x42); - db(0x0c); db(0x42); db(0x00); db(0x08); db(0x66); db(0xc6); db(0x27); db(0x44); - db(0x00); db(0x04); db(0x10); db(0x2c); db(0x00); db(0x00); db(0x08); db(0x00); - db(0x00); db(0x00); db(0x67); db(0x00); db(0xfd); db(0x6e); db(0x42); db(0x92); - db(0x35); db(0x7c); db(0x04); db(0x00); db(0x00); db(0x04); db(0x42); db(0x6a); - db(0x00); db(0x06); db(0x61); db(0x00); db(0x00); db(0x38); db(0x20); db(0x6b); - db(0x00); db(0x14); db(0x30); db(0x2c); db(0x00); db(0x28); db(0x32); db(0x28); - db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); - db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0a); db(0x30); db(0x2c); - db(0x00); db(0x2a); db(0x32); db(0x28); db(0x00); db(0x2e); db(0xd2); db(0x41); - db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); - db(0x00); db(0x0c); db(0x61); db(0x00); db(0xfb); db(0x78); db(0x60); db(0x00); - db(0xfd); db(0x2a); 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(0x00); db(0x01); - db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x08); db(0x01); - db(0x00); db(0x02); db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0c); - db(0x35); db(0x40); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x4a); db(0xa9); - db(0x02); db(0x08); db(0x67); db(0x18); db(0x4a); db(0xa9); db(0x02); db(0x0c); - db(0x67); db(0x12); db(0x20); db(0x69); db(0x02); db(0x10); db(0x30); db(0x28); - db(0x00); db(0x02); db(0xb0); db(0x69); db(0x00); db(0x16); db(0x67); db(0x18); - db(0x33); db(0x40); db(0x00); db(0x16); db(0x2f); db(0x09); db(0x2c); db(0x69); - db(0x00); db(0x26); db(0x20); db(0x29); db(0x00); db(0x22); db(0x22); db(0x69); - db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(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(0x36); 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(0x1c); 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(0x08); db(0xea); - db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa); db(0x09); db(0x6a); - db(0x43); db(0xfa); db(0x01); db(0x12); db(0x70); db(0xf6); db(0x22); db(0x3c); - db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00); db(0xeb); db(0x8c); - 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(0x08); db(0xc0); 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(0x08); db(0xf8); - 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(0x02); - db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); - db(0x66); db(0x32); db(0x0c); db(0x92); db(0x50); db(0x4e); db(0x54); db(0x52); - db(0x66); db(0xe4); db(0x24); db(0x0a); db(0x76); db(0x04); db(0x22); db(0x04); - db(0x4e); db(0xae); db(0xff); db(0xd6); db(0x24); db(0x0a); 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(0x30); 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(0x70); 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(0x60); - 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(0x16); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x04); db(0x30); db(0x2c); db(0x00); db(0x1c); db(0x48); db(0xc0); + db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x2c); db(0x00); db(0x18); + db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x05); + db(0x30); db(0x2c); db(0x00); db(0x1e); db(0x48); db(0xc0); db(0xe1); db(0x80); + db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x2c); db(0x00); db(0x26); + db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x08); + db(0x22); db(0xc0); db(0x42); db(0x91); db(0x61); db(0x00); db(0xfc); db(0x40); + db(0x36); db(0x3c); db(0x00); db(0x68); db(0x74); db(0x01); db(0x28); db(0x2c); + db(0x00); db(0x22); db(0x20); db(0x04); db(0xc0); db(0x82); db(0x22); db(0x2b); + db(0x00); db(0x04); db(0xc2); db(0x82); db(0xb2); db(0x80); db(0x67); db(0x22); + db(0x42); db(0x92); db(0x35); db(0x7c); db(0x02); db(0x00); db(0x00); db(0x04); + db(0x42); db(0xaa); db(0x00); db(0x0a); db(0x32); db(0x03); db(0x4a); db(0x00); + db(0x66); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x07); db(0x35); db(0x41); + db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); db(0x61); db(0x00); + db(0xfc); db(0x06); db(0x52); db(0x43); db(0xd4); db(0x42); db(0x0c); db(0x42); + db(0x00); db(0x08); db(0x66); db(0xc6); db(0x27); db(0x44); db(0x00); db(0x04); + db(0x10); db(0x2c); db(0x00); db(0x00); db(0x08); db(0x00); db(0x00); db(0x00); + db(0x67); db(0x00); db(0xfd); db(0x6e); db(0x42); db(0x92); db(0x35); db(0x7c); + db(0x04); db(0x00); db(0x00); db(0x04); db(0x42); db(0x6a); db(0x00); db(0x06); + db(0x61); db(0x00); db(0x00); db(0x38); db(0x20); db(0x6b); db(0x00); db(0x14); + db(0x30); db(0x2c); db(0x00); db(0x28); db(0x32); db(0x28); db(0x00); db(0x30); + db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); + db(0x35); db(0x40); db(0x00); db(0x0a); db(0x30); db(0x2c); db(0x00); db(0x2a); + db(0x32); db(0x28); db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); + db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0c); + db(0x61); db(0x00); db(0xfb); db(0x78); db(0x60); db(0x00); db(0xfd); db(0x2a); + 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(0x00); db(0x01); db(0x67); db(0x04); + db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x08); db(0x01); db(0x00); db(0x02); + db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0c); db(0x35); db(0x40); + db(0x00); db(0x08); db(0x4e); db(0x75); db(0x4a); db(0xa9); db(0x02); db(0x08); + db(0x67); db(0x18); db(0x4a); db(0xa9); db(0x02); db(0x0c); db(0x67); db(0x12); + db(0x20); db(0x69); db(0x02); db(0x10); db(0x30); db(0x28); db(0x00); db(0x02); + db(0xb0); db(0x69); db(0x00); db(0x16); db(0x67); db(0x18); db(0x33); db(0x40); + db(0x00); db(0x16); db(0x2f); db(0x09); db(0x2c); db(0x69); db(0x00); db(0x26); + db(0x20); db(0x29); db(0x00); db(0x22); db(0x22); db(0x69); db(0x00); db(0x1e); + db(0x4e); db(0xae); db(0xfe); db(0xbc); db(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(0x38); 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(0x1e); 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(0x08); db(0xec); db(0x20); db(0x0d); + db(0x4e); db(0x90); db(0x41); db(0xfa); db(0x09); db(0x6c); 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(0xeb); db(0x46); 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(0x08); db(0xc2); + 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(0x08); db(0xfa); 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(0x02); db(0x22); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); db(0x66); db(0x32); + db(0x0c); db(0x92); db(0x50); db(0x4e); db(0x54); db(0x52); db(0x66); db(0xe4); + db(0x24); db(0x0a); db(0x76); db(0x04); db(0x22); db(0x04); db(0x4e); db(0xae); + db(0xff); db(0xd6); db(0x24); db(0x0a); 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(0x32); + 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(0x72); + 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(0x62); 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(0x07); db(0xc0); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); - db(0xfe); db(0xfe); db(0x2a); db(0x40); db(0x2c); db(0x6d); db(0x00); db(0x14); + 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(0x08); db(0xc0); 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(0xdc); db(0x2c); db(0x40); db(0x72); db(0x32); + 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(0x07); db(0xc6); 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(0x07); db(0xb0); 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(0xa6); db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); - db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x61); db(0x00); db(0xf7); db(0xf2); + 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(0x61); db(0x00); db(0xf7); db(0xf0); db(0x72); db(0x00); db(0x32); db(0x3c); db(0x00); db(0x34); db(0x61); db(0x00); - db(0xf8); db(0x36); db(0x28); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x00); - db(0xfe); db(0x86); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); + db(0xf8); db(0x34); db(0x28); db(0x40); 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(0x89); 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(0x4a); + 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(0xfe); db(0xc2); db(0x60); db(0xf8); - db(0x61); db(0x00); db(0xfe); db(0xe8); db(0x41); db(0xed); db(0x00); db(0x1c); + db(0x61); db(0x00); db(0xfe); db(0xe6); db(0x41); db(0xed); db(0x00); db(0x1c); db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); db(0x39); db(0x7c); db(0x00); db(0x0c); db(0x00); db(0x1c); db(0x2b); db(0x4d); db(0x00); db(0x2c); db(0x41); db(0xfa); db(0x01); db(0x60); @@ -788,7 +797,7 @@ 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(0xc2); db(0x05); db(0x00); - db(0x67); db(0x06); db(0x61); db(0x00); db(0xfe); db(0x20); db(0x60); db(0xe4); + db(0x67); db(0x06); db(0x61); db(0x00); 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); @@ -847,7 +856,7 @@ 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(0x05); db(0xfb); 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(0xe7); db(0x96); db(0x4e); db(0x75); + db(0x1f); db(0x40); db(0x61); db(0x00); db(0xe7); db(0x4e); 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(0x05); db(0xe4); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x72); db(0x02); @@ -1003,7 +1012,7 @@ 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(0x55); db(0x41); db(0x45); db(0x20); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x00); - db(0x41); db(0xfa); db(0xe0); db(0x92); db(0x02); db(0x80); db(0x00); db(0x00); + db(0x41); db(0xfa); db(0xe0); db(0x4a); 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); diff --git a/include/autoconf.h b/include/autoconf.h index 69de7405..0ccae101 100644 --- a/include/autoconf.h +++ b/include/autoconf.h @@ -53,6 +53,9 @@ #define RTAREA_TRAP_SEND_STATUS (RTAREA_TRAP_STATUS + RTAREA_TRAP_STATUS_SIZE * RTAREA_TRAP_DATA_NUM) #define RTAREA_TRAP_SEND_DATA (RTAREA_TRAP_DATA + RTAREA_TRAP_DATA_SLOT_SIZE * RTAREA_TRAP_DATA_NUM) +#define UAEBOARD_DATAREGION_START 0x4000 +#define UAEBOARD_DATAREGION_SIZE 0xc000 + extern uae_u32 addr (int); extern void db (uae_u8); extern void dw (uae_u16); @@ -138,6 +141,7 @@ extern void expansion_clear (void); extern void expansion_autoconfig_put(int, uae_u8); extern uaecptr expansion_startaddress(uaecptr addr, uae_u32 size); extern bool expansion_is_next_board_fastram(void); +extern uaecptr uaeboard_alloc_ram(uae_u32); extern void uaegfx_install_code (uaecptr); diff --git a/include/custom.h b/include/custom.h index ebc1a2f4..27e59148 100644 --- a/include/custom.h +++ b/include/custom.h @@ -44,8 +44,7 @@ extern void init_row_map (void); extern void init_hz_normal (void); extern void init_custom (void); -extern bool picasso_requested_on; -extern bool picasso_on; +extern bool picasso_requested_on, picasso_requested_forced_on, picasso_on; extern void set_picasso_hack_rate (int hz); /* Set to 1 to leave out the current frame in average frame time calculation. diff --git a/include/memory.h b/include/memory.h index 72487762..910431ea 100644 --- a/include/memory.h +++ b/include/memory.h @@ -66,6 +66,7 @@ extern uae_u16 kickstart_version; extern int uae_boot_rom_type; extern int uae_boot_rom_size; extern uaecptr rtarea_base; +extern uaecptr uaeboard_base; extern uae_u8* baseaddr[]; diff --git a/include/traps.h b/include/traps.h index a48fb7c9..2b8edab9 100644 --- a/include/traps.h +++ b/include/traps.h @@ -101,6 +101,9 @@ void trap_reset(void); typedef uae_u32 (*TRAP_CALLBACK)(TrapContext*, void*); void trap_callback(TRAP_CALLBACK, void*); +void trap_memcpyha_safe(TrapContext *ctx, uaecptr dst, const uae_u8 *src, int size); +void trap_memcpyah_safe(TrapContext *ctx, uae_u8 *dst, uaecptr src, int size); + TrapContext *alloc_host_main_trap_context(void); void free_host_trap_context(TrapContext*); diff --git a/memory.cpp b/memory.cpp index 3a7dcef4..e6c68263 100644 --- a/memory.cpp +++ b/memory.cpp @@ -3099,19 +3099,19 @@ uae_u8 *save_rom (int first, int *len, uae_u8 *dstptr) /* memory helpers */ -void memcpyha_safe (uaecptr dst, const uae_u8 *src, int size) +void memcpyha_safe(uaecptr dst, const uae_u8 *src, int size) { if (!addr_valid (_T("memcpyha"), dst, size)) return; while (size--) put_byte (dst++, *src++); } -void memcpyha (uaecptr dst, const uae_u8 *src, int size) +void memcpyha(uaecptr dst, const uae_u8 *src, int size) { while (size--) put_byte (dst++, *src++); } -void memcpyah_safe (uae_u8 *dst, uaecptr src, int size) +void memcpyah_safe(uae_u8 *dst, uaecptr src, int size) { if (!addr_valid (_T("memcpyah"), src, size)) return; diff --git a/od-win32/direct3d.cpp b/od-win32/direct3d.cpp index 1571df9a..5e46223d 100644 --- a/od-win32/direct3d.cpp +++ b/od-win32/direct3d.cpp @@ -99,6 +99,7 @@ static LPDIRECT3DTEXTURE9 lpPostTempTexture; #define SHADER_POST 0 static struct shaderdata shaders[MAX_SHADERS]; +static IDirect3DSurface9 *screenshotsurface; static D3DFORMAT tformat; static int d3d_enabled, d3d_ex; static IDirect3D9 *d3d; @@ -2168,6 +2169,9 @@ static int restoredeviceobjects (void) static void D3D_free2 (void) { invalidatedeviceobjects (); + if (screenshotsurface) + screenshotsurface->Release(); + screenshotsurface = NULL; if (d3ddev) { d3ddev->Release (); d3ddev = NULL; @@ -2616,6 +2620,11 @@ static const TCHAR *D3D_init2 (HWND ahwnd, int w_w, int w_h, int depth, int *fre write_log (_T("%s: SetMaximumFrameLatency() failed: %s\n"), D3DHEAD, D3D_ErrorString (hr)); } + hr = d3ddev->CreateOffscreenPlainSurface(w_w, w_h, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &screenshotsurface, NULL); + if (FAILED(hr)) { + write_log(_T("%s: CreateOffscreenPlainSurface failed: %s\n"), D3DHEAD, D3D_ErrorString(hr)); + } + return 0; } diff --git a/od-win32/mman.cpp b/od-win32/mman.cpp index d5a8c46b..0102d4fe 100644 --- a/od-win32/mman.cpp +++ b/od-win32/mman.cpp @@ -651,6 +651,12 @@ void *uae_shmat (addrbank *ab, int shmid, void *shmaddr, int shmflg) got = true; readonly = true; readonlysize = RTAREA_TRAPS; + } else if (!_tcscmp(shmids[shmid].name, _T("uaeboard"))) { + if (currprefs.uaeboard > 1) + shmaddr = natmem_offset + rtarea_base - 65536; + else + shmaddr = natmem_offset + 0xe90000; // FIXME! + got = true; } else if (!_tcscmp(shmids[shmid].name, _T("fmv_rom"))) { got = true; shmaddr = natmem_offset + 0x200000; @@ -752,16 +758,6 @@ void *uae_shmat (addrbank *ab, int shmid, void *shmaddr, int shmflg) got = true; if (currprefs.bogomem_size <= 0x100000) size += BARRIER; -#if 0 - } else if(!_tcscmp (shmids[shmid].name, _T("filesys"))) { - static uae_u8 *filesysptr; - if (filesysptr == NULL) - filesysptr = xcalloc (uae_u8, size); - result = filesysptr; - shmids[shmid].attached = result; - shmids[shmid].fake = true; - return result; -#endif } else if(!_tcscmp (shmids[shmid].name, _T("custmem1"))) { shmaddr=natmem_offset + currprefs.custom_memory_addrs[0]; got = true; diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 4213f243..96aa778c 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -536,7 +536,13 @@ static void setcursorshape (void) static void releasecapture (void) { - //write_log (_T("releasecapture %d\n"), showcursor); + //write_log(_T("releasecapture %d\n"), showcursor); +#if 0 + CURSORINFO pci; + pci.cbSize = sizeof pci; + GetCursorInfo(&pci); + write_log(_T("PCI %08x %p %d %d\n"), pci.flags, pci.hCursor, pci.ptScreenPos.x, pci.ptScreenPos.y); +#endif if (!showcursor) return; ClipCursor (NULL); @@ -679,7 +685,6 @@ static void setmouseactive2 (int active, bool allowpause) showcursor = 1; updatemouseclip (); } - showcursor = 1; setcursor (-30000, -30000); } inputdevice_acquire (TRUE); @@ -1579,6 +1584,7 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, device_change_timer = 0; KillTimer(hWnd, 4); inputdevice_devicechange (&changed_prefs); + inputdevice_copyjports(&changed_prefs, &workprefs); } else if (wParam == 1) { #ifdef PARALLEL_PORT finishjob (); diff --git a/od-win32/win32.h b/od-win32/win32.h index 5369bbcb..83a71407 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -20,12 +20,12 @@ #define LANG_DLL_FULL_VERSION_MATCH 1 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("4") +#define WINUAEBETA _T("5") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2016, 2, 7) +#define WINUAEDATE MAKEBD(2016, 2, 10) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 3118ce3a..94743660 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -2058,7 +2058,7 @@ int target_cfgfile_load (struct uae_prefs *p, const TCHAR *filename, int type, i } type2 = type; if (type == 0 || type == 3) { - default_prefs (p, type); + default_prefs (p, true, type); write_log(_T("config reset\n")); #if 0 if (isdefault == 0) { @@ -6539,7 +6539,7 @@ static int *getp_da (HWND hDlg) case 6: p = &workprefs.gfx_threebitcolors; vmin = 0; - vmax = 2; + vmax = 3; da_mode_multiplier = 1; break; } @@ -18765,7 +18765,7 @@ static int GetSettings (int all_options, HWND hwnd) allow_quit = all_options; pguiprefs = &currprefs; memset (&workprefs, 0, sizeof (struct uae_prefs)); - default_prefs (&workprefs, 0); + default_prefs (&workprefs, false, 0); szNone = WIN32GUI_LoadUIString (IDS_NONE); prefs_to_gui (&changed_prefs); @@ -19047,7 +19047,7 @@ int gui_init (void) int ret; read_rom_list (); - default_prefs(&workprefs, 0); + default_prefs(&workprefs, false, 0); prefs_to_gui(&changed_prefs); inputdevice_updateconfig(NULL, &workprefs); for (;;) { diff --git a/od-win32/win32gui.h b/od-win32/win32gui.h index 1fa1da4e..c3fd90b5 100644 --- a/od-win32/win32gui.h +++ b/od-win32/win32gui.h @@ -31,6 +31,8 @@ struct newresource #define GUI_INTERNAL_HEIGHT 600 #define GUI_INTERNAL_FONT 8 +extern struct uae_prefs workprefs; + extern struct newresource *scaleresource (struct newresource *res, HWND, int, int, DWORD); extern void freescaleresource (struct newresource*); extern void scaleresource_setmult (HWND hDlg, int w, int h, int fs); diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 13472a91..13203199 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,21 @@ +Beta 5: + +- Game Ports mouse and joystick was always reset to defaults (b4) +- Dark palette fix adjustment is now calculated before other adjustments (brightness, contrast, gamme) +- Dark palette fix third option added, pre-converted Atari ST palette increased to full range, 12-bit EEE becomes + nearly full white, FCFCFC in 24-bit RGB space. (Not FFFFFF because palette would not be linear anymore) + +OS4 UAE expansion updates: + +- Directory filesystem random errors fixed. +- Directory filesystem/CDFS CD on the fly insertion/removal supported! (It wasn't that difficult after all) +- uaescsi.device supported. + +NOTE: Try not to change uaegfx resolution in OS4, it can cause mysterious crashes or side-effects. Fix coming later. + +TODO: bsdsocket.library and fixing random hangs. + Beta 4: - Default game ports config without default.uae (Mouse + keyboard layout A) was not set. (b3) diff --git a/ppc/ppc.cpp b/ppc/ppc.cpp index c4dc0638..fd32188e 100644 --- a/ppc/ppc.cpp +++ b/ppc/ppc.cpp @@ -489,9 +489,9 @@ void ppc_map_banks(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, b r.alias = remove ? 0xffffffff : 0; r.memory = addr; - // Map first half directly, it contains code only. - // Second half has dynamic data, it must not be direct mapped. if (r.start == rtarea_base && rtarea_base) { + // 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); @@ -500,6 +500,16 @@ void ppc_map_banks(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, b r.name = ua(name); r.alias = remove ? 0xffffffff : 0; r.memory = NULL; + } else if (r.start == uaeboard_base && uaeboard_base) { + // Opposite here, first half indirect, second half direct. + r.memory = NULL; + r.size = UAEBOARD_DATAREGION_START; + ppc_map_region(&r); + 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); } diff --git a/traps.cpp b/traps.cpp index 5d7588c1..09c40ff5 100644 --- a/traps.cpp +++ b/traps.cpp @@ -224,7 +224,7 @@ struct TrapContext uaecptr amiga_trap_data; uaecptr amiga_trap_status; /* do not ack automatically */ - volatile int trap_background; + volatile uae_atomic trap_background; volatile bool trap_done; uae_u32 calllib_regs[16]; uae_u8 calllib_reg_inuse[16]; @@ -392,9 +392,12 @@ void trap_background_set_complete(TrapContext *ctx) return; if (!ctx || !ctx->trap_background) return; - ctx->trap_background--; + atomic_dec(&ctx->trap_background); if (!ctx->trap_background) { - while (!ctx->trap_done); + if (!ctx->trap_done) { + write_log(_T("trap_background_set_complete(%d) still waiting!?\n"), ctx->tindex); + while (!ctx->trap_done); + } hardware_trap_ack(ctx); } } @@ -885,7 +888,7 @@ void trap_set_background(TrapContext *ctx) return; if (!trap_is_indirect()) return; - ctx->trap_background++; + atomic_inc(&ctx->trap_background); } bool trap_valid_address(TrapContext *ctx, uaecptr addr, uae_u32 size) @@ -1338,3 +1341,20 @@ void trap_multi(TrapContext *ctx, struct trapmd *data, int items) } } } + +void trap_memcpyha_safe(TrapContext *ctx, uaecptr dst, const uae_u8 *src, int size) +{ + if (trap_is_indirect()) { + trap_put_bytes(ctx, src, dst, size); + } else { + memcpyha_safe(dst, src, size); + } +} +void trap_memcpyah_safe(TrapContext *ctx, uae_u8 *dst, uaecptr src, int size) +{ + if (trap_is_indirect()) { + trap_get_bytes(ctx, dst, src, size); + } else { + memcpyah_safe(dst, src, size); + } +} \ No newline at end of file -- 2.47.3