This commit is contained in:
Toni Wilen 2016-04-09 20:04:05 +03:00
parent 9070761970
commit 1205c909aa
22 changed files with 853 additions and 472 deletions

View File

@ -24,6 +24,7 @@
#include "threaddep/thread.h"
#include "native2amiga.h"
#include "inputdevice.h"
#include "uae/ppc.h"
/* Commonly used autoconfig strings */
@ -38,6 +39,7 @@ uae_sem_t hardware_trap_event[RTAREA_TRAP_DATA_SIZE / RTAREA_TRAP_DATA_SLOT_SIZE
uae_sem_t hardware_trap_event2[RTAREA_TRAP_DATA_SIZE / RTAREA_TRAP_DATA_SLOT_SIZE];
static uaecptr rt_trampoline_ptr, trap_entry;
static bool rtarea_write_enabled;
extern volatile uae_atomic hwtrap_waiting;
extern volatile int trap_mode;
@ -181,6 +183,8 @@ static uae_u32 REGPARAM2 rtarea_bget (uaecptr addr)
static bool rtarea_write(uaecptr addr)
{
if (rtarea_write_enabled)
return true;
if (addr >= RTAREA_WRITEOFFSET)
return true;
if (addr >= RTAREA_SYSBASE && addr < RTAREA_SYSBASE + 4)
@ -268,6 +272,7 @@ static void REGPARAM2 rtarea_wput (uaecptr addr, uae_u32 value)
}
}
}
static void REGPARAM2 rtarea_lput (uaecptr addr, uae_u32 value)
{
addr &= 0xffff;
@ -374,17 +379,96 @@ uae_u32 ds_bstr_ansi (const uae_char *str)
return addr (rt_straddr) >> 2;
}
#define MAX_ABSOLUTE_ROM_ADDRESS 1024
static int absolute_rom_address;
static uaecptr absolute_rom_addresses[MAX_ABSOLUTE_ROM_ADDRESS];
static uaecptr rombase_new;
void save_rom_absolute(uaecptr addr)
{
if (rombase_new)
return;
if (absolute_rom_address >= MAX_ABSOLUTE_ROM_ADDRESS) {
write_log(_T("MAX_ABSOLUTE_ROM_ADDRESS is too low!"));
abort();
}
for (int i = 0; i < absolute_rom_address; i++) {
if (absolute_rom_addresses[i] == addr) {
write_log(_T("Address %08x already added\n"), addr);
return;
}
}
absolute_rom_addresses[absolute_rom_address++] = addr;
}
void add_rom_absolute(uaecptr addr)
{
uaecptr h = here();
dl(addr);
save_rom_absolute(h);
}
uae_u32 boot_rom_copy(TrapContext *ctx, uaecptr rombase, int mode)
{
uaecptr reloc = 0;
if (currprefs.uaeboard < 3)
return 0;
if (!mode) {
rtarea_write_enabled = true;
protect_roms(false);
rombase_new = rombase;
int size = 4 + 2 + 4;
for (int i = 0; i < absolute_rom_address; i++) {
uae_u32 a = absolute_rom_addresses[i];
if (a >= rtarea_base && a < rtarea_base + 0x10000) {
size += 2;
} else {
size += 4;
}
}
reloc = uaeboard_alloc_ram(size);
uae_u8 *p = uaeboard_map_ram(reloc);
put_long_host(p, rtarea_base);
p += 4;
for (int i = 0; i < absolute_rom_address; i++) {
uae_u32 a = absolute_rom_addresses[i];
if (a >= rtarea_base && a < rtarea_base + 0x10000) {
put_word_host(p, a & 0xffff);
p += 2;
}
}
put_word_host(p, 0);
p += 2;
for (int i = 0; i < absolute_rom_address; i++) {
uae_u32 a = absolute_rom_addresses[i];
if (a < rtarea_base || a >= rtarea_base + 0x10000) {
put_long_host(p, a);
p += 4;
}
}
put_long_host(p, 0);
write_log(_T("ROMBASE %08x RAMBASE %08x RELOC %08x (%d)\n"), rtarea_base, rombase, reloc, absolute_rom_address);
} else {
rtarea_write_enabled = false;
protect_roms(true);
write_log(_T("ROMBASE changed.\n"), absolute_rom_address);
reloc = 1;
}
return reloc;
}
void calltrap (uae_u32 n)
{
if (currprefs.uaeboard > 2) {
dw(0x4eb9); // JSR rt_trampoline_ptr
dl(rt_trampoline_ptr);
add_rom_absolute(rt_trampoline_ptr);
uaecptr a = here();
org(rt_trampoline_ptr);
dw(0x3f3c); // MOVE.W #n,-(SP)
dw(n);
dw(0x4ef9); // JMP rt_trampoline_entry
dl(trap_entry);
add_rom_absolute(trap_entry);
org(a);
rt_trampoline_ptr += 3 * 2 + 1 * 4;
} else {
@ -462,6 +546,8 @@ void rtarea_init(void)
rt_trampoline_ptr = rtarea_base + RTAREA_TRAMPOLINE;
trap_entry = 0;
absolute_rom_address = 0;
rombase_new = 0;
init_traps ();

View File

@ -196,7 +196,7 @@ static const TCHAR *joyportmodes[] = { _T(""), _T("mouse"), _T("mousenowheel"),
static const TCHAR *joyaf[] = { _T("none"), _T("normal"), _T("toggle"), _T("always"), 0 };
static const TCHAR *epsonprinter[] = { _T("none"), _T("ascii"), _T("epson_matrix_9pin"), _T("epson_matrix_24pin"), _T("epson_matrix_48pin"), 0 };
static const TCHAR *aspects[] = { _T("none"), _T("vga"), _T("tv"), 0 };
static const TCHAR *vsyncmodes[] = { _T("false"), _T("true"), _T("autoswitch"), 0 };
static const TCHAR *vsyncmodes[] = { _T("adaptive"), _T("false"), _T("true"), _T("autoswitch"), 0 };
static const TCHAR *vsyncmodes2[] = { _T("normal"), _T("busywait"), 0 };
static const TCHAR *filterapi[] = { _T("directdraw"), _T("direct3d"), 0 };
static const TCHAR *dongles[] =
@ -1571,9 +1571,9 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
cfgfile_write (f, _T("gfx_backbuffers_rtg"), _T("%d"), p->gfx_apmode[1].gfx_backbuffers);
if (p->gfx_apmode[APMODE_NATIVE].gfx_interlaced)
cfgfile_write_bool (f, _T("gfx_interlace"), p->gfx_apmode[APMODE_NATIVE].gfx_interlaced);
cfgfile_write_str (f, _T("gfx_vsync"), vsyncmodes[p->gfx_apmode[0].gfx_vsync]);
cfgfile_write_str (f, _T("gfx_vsync"), vsyncmodes[p->gfx_apmode[0].gfx_vsync + 1]);
cfgfile_write_str (f, _T("gfx_vsyncmode"), vsyncmodes2[p->gfx_apmode[0].gfx_vsyncmode]);
cfgfile_write_str (f, _T("gfx_vsync_picasso"), vsyncmodes[p->gfx_apmode[1].gfx_vsync]);
cfgfile_write_str (f, _T("gfx_vsync_picasso"), vsyncmodes[p->gfx_apmode[1].gfx_vsync + 1]);
cfgfile_write_str (f, _T("gfx_vsyncmode_picasso"), vsyncmodes2[p->gfx_apmode[1].gfx_vsyncmode]);
cfgfile_write_bool (f, _T("gfx_lores"), p->gfx_resolution == 0);
cfgfile_write_str (f, _T("gfx_resolution"), lorestype1[p->gfx_resolution]);
@ -2813,13 +2813,17 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value)
return 1;
}
if (_tcscmp (option, _T("gfx_vsync")) == 0) {
if (cfgfile_strval (option, value, _T("gfx_vsync"), &p->gfx_apmode[APMODE_NATIVE].gfx_vsync, vsyncmodes, 0) >= 0)
if (cfgfile_strval (option, value, _T("gfx_vsync"), &p->gfx_apmode[APMODE_NATIVE].gfx_vsync, vsyncmodes, 0) >= 0) {
p->gfx_apmode[APMODE_NATIVE].gfx_vsync--;
return 1;
}
return cfgfile_yesno (option, value, _T("gfx_vsync"), &p->gfx_apmode[APMODE_NATIVE].gfx_vsync);
}
if (_tcscmp (option, _T("gfx_vsync_picasso")) == 0) {
if (cfgfile_strval (option, value, _T("gfx_vsync_picasso"), &p->gfx_apmode[APMODE_RTG].gfx_vsync, vsyncmodes, 0) >= 0)
if (cfgfile_strval (option, value, _T("gfx_vsync_picasso"), &p->gfx_apmode[APMODE_RTG].gfx_vsync, vsyncmodes, 0) >= 0) {
p->gfx_apmode[APMODE_RTG].gfx_vsync--;
return 1;
}
return cfgfile_yesno (option, value, _T("gfx_vsync_picasso"), &p->gfx_apmode[APMODE_RTG].gfx_vsync);
}
if (cfgfile_strval (option, value, _T("gfx_vsyncmode"), &p->gfx_apmode[APMODE_NATIVE].gfx_vsyncmode, vsyncmodes2, 0))

View File

@ -1743,7 +1743,7 @@ static void pfield_set_linetoscr (void)
switch (gfxvidinfo.drawbuffer.pixbytes) {
case 2:
pfield_do_linetoscr_normal = need_genlock_data ? linetoscr_16_stretch2_aga_genlock : linetoscr_16_stretch2_aga;
pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_stretch2_aga_spr_genlock : linetoscr_16_stretch2_aga_spr_genlock;
pfield_do_linetoscr_sprite = need_genlock_data ? linetoscr_16_stretch2_aga_spr_genlock : linetoscr_16_stretch2_aga_spr;
pfield_do_linetoscr_spriteonly = linetoscr_16_stretch2_aga_spronly;
break;
case 4:
@ -2012,12 +2012,13 @@ static void init_ham_decoding (void)
} else { /* AGA mode HAM6 */
while (unpainted_amiga-- > 0) {
int pv = pixdata.apixels[ham_decode_pixel++] ^ bplxor;
uae_u32 pc = ((pv & 0xf) << 0) | ((pv & 0xf) << 4);
switch (pv & 0x30)
{
case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv] & 0xffffff; break;
case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= (pv & 0xF) << 4; break;
case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= (pv & 0xF) << 20; break;
case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= (pv & 0xF) << 12; break;
case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= pc << 0; break;
case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= pc << 16; break;
case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= pc << 8; break;
}
}
}
@ -2071,12 +2072,13 @@ static void decode_ham (int pix, int stoppos, bool blank)
} else { /* AGA mode HAM6 */
while (todraw_amiga-- > 0) {
int pv = pixdata.apixels[ham_decode_pixel] ^ bplxor;
uae_u32 pc = ((pv & 0xf) << 0) | ((pv & 0xf) << 4);
switch (pv & 0x30)
{
case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv] & 0xffffff; break;
case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= (pv & 0xF) << 4; break;
case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= (pv & 0xF) << 20; break;
case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= (pv & 0xF) << 12; break;
case 0x10: ham_lastcolor &= 0xFFFF00; ham_lastcolor |= pc << 0; break;
case 0x20: ham_lastcolor &= 0x00FFFF; ham_lastcolor |= pc << 16; break;
case 0x30: ham_lastcolor &= 0xFF00FF; ham_lastcolor |= pc << 8; break;
}
ham_linebuf[ham_decode_pixel++] = ham_lastcolor;
}
@ -4162,7 +4164,7 @@ void drawing_init (void)
int isvsync_chipset (void)
{
if (picasso_on || !currprefs.gfx_apmode[0].gfx_vsync || (currprefs.gfx_apmode[0].gfx_vsync == 0 && !currprefs.gfx_apmode[0].gfx_fullscreen))
if (picasso_on || currprefs.gfx_apmode[0].gfx_vsync <= 0 || (currprefs.gfx_apmode[0].gfx_vsync <= 0 && !currprefs.gfx_apmode[0].gfx_fullscreen))
return 0;
if (currprefs.gfx_apmode[0].gfx_vsyncmode == 0)
return 1;
@ -4173,7 +4175,7 @@ int isvsync_chipset (void)
int isvsync_rtg (void)
{
if (!picasso_on || !currprefs.gfx_apmode[1].gfx_vsync || (currprefs.gfx_apmode[1].gfx_vsync == 0 && !currprefs.gfx_apmode[1].gfx_fullscreen))
if (!picasso_on || currprefs.gfx_apmode[1].gfx_vsync <= 0 || (currprefs.gfx_apmode[1].gfx_vsync <= 0 && !currprefs.gfx_apmode[1].gfx_fullscreen))
return 0;
if (currprefs.gfx_apmode[1].gfx_vsyncmode == 0)
return 1;

View File

@ -1221,9 +1221,12 @@ static addrbank *expamem_map_uaeboard(void)
{
uaeboard_base = expamem_z2_pointer;
uaeboard_ram_start = UAEBOARD_WRITEOFFSET;
uaeboard_bank.start = uaeboard_base;
map_banks_z2(&uaeboard_bank, uaeboard_base >> 16, 1);
if (currprefs.uaeboard > 1)
if (currprefs.uaeboard > 1) {
rtarea_bank.start = uaeboard_base + 65536;
map_banks_z2(&rtarea_bank, (uaeboard_base + 65536) >> 16, 1);
}
return &uaeboard_bank;
}
@ -1244,7 +1247,7 @@ static addrbank* expamem_init_uaeboard(int devnum)
expamem_write(0x18, 0x00); /* ser.no. Byte 0 */
expamem_write(0x1c, 0x00); /* ser.no. Byte 1 */
expamem_write(0x20, 0x00); /* ser.no. Byte 2 */
expamem_write(0x20, currprefs.uaeboard); /* ser.no. Byte 2 */
expamem_write(0x24, 0x02); /* ser.no. Byte 3 */
uae_u8 *p = uaeboard_bank.baseaddr;

View File

@ -93,7 +93,7 @@ startjmp:
bra.w filesys_mainloop ;1 16
dc.l make_dev-start ;2 20
dc.l filesys_init-start ;3 24
dc.l 0 ;4 28
dc.l moverom-start ;4 28
dc.l bootcode-start ;5 32
dc.l setup_exter-start ;6 36
dc.l bcplwrapper-start ;7 40
@ -432,7 +432,7 @@ mountproc
dc.l 0
moveq #2,d1
move.w #$FF48,d0 ; get new unit number
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
move.l d0,d1
bmi.s .out
@ -498,7 +498,7 @@ exter_task_wait
moveq #10,d7
EXTT_loop
move.w #$FF50,d0 ; exter_int_helper
bsr.w getrtbase
bsr.w getrtbaselocal
move.l d7,d0
jsr (a0)
tst.l d0
@ -554,7 +554,7 @@ EXTT_shellexec
bsr.w createproc
move.l d0,d1
move.w #$FF50,d0 ; exter_int_helper
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #20,d0
jsr (a0)
bra.w EXTT_loop
@ -596,7 +596,7 @@ shellexecproc:
.seproc1
move.w #$FF50,d0 ; exter_int_helper
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #21,d0
jsr (a0)
; a0 = command
@ -665,7 +665,7 @@ shellexecproc:
move.l a4,sp
move.w #$FF50,d0 ; exter_int_helper
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #22,d0
jsr (a0)
@ -679,7 +679,7 @@ heartbeatvblank:
move.w #$FF38,d0
moveq #18,d1
bsr.w getrtbase
bsr.w getrtbaselocal
move.l d2,d0
move.l d3,d2
jsr (a0)
@ -790,7 +790,7 @@ setup_exter:
move.w #$FF38,d0
moveq #4,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
tst.l d0
beq.s .nomh
@ -1314,7 +1314,7 @@ make_dev: ; IN: A0 param_packet, D6: unit_no
bsr.w getrtbase
move.l (a0),a5
move.w #$FF28,d0 ; fill in unit-dependent info (filesys_dev_storeinfo)
bsr.w getrtbase
bsr.w getrtbaselocal
move.l a0,a1
move.l (sp)+,a0
clr.l PP_FSSIZE(a0) ; filesystem size
@ -1352,7 +1352,7 @@ mountalways
; do not mount but we might need to load possible custom filesystem(s)
move.l a0,a1
move.w #$FF20,d0 ; record in ui.startup (filesys_dev_remember)
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
bra.s dont_mount
@ -1364,7 +1364,7 @@ do_mount:
move.l a0,a1
move.l d0,a3 ; devicenode
move.w #$FF20,d0 ; record in ui.startup (filesys_dev_remember)
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
moveq #0,d0
move.l d0,8(a3) ; dn_Task
@ -1406,7 +1406,7 @@ nordbfs2:
move.l d0,d1
move.w #$FF18,d0 ; update dn_SegList if needed (filesys_dev_bootfilesys)
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
move.l d3,d0
@ -1557,7 +1557,7 @@ addfsonthefly ; d1 = fs index
clockreset:
move.w #$ff58,d0 ; fsmisc_helper
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #3,d0 ; get time
jsr (a0)
move.l 168(a3),a1
@ -1603,7 +1603,7 @@ filesys_mainloop_bcpl:
move.l #12+20+(44+20+60+1)+3+4+4+4+(1+3)+4+4+4,d1
move.w #$FF40,d0 ; startup_handler
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #1,d0
jsr (a0)
; if d0 != 0, it becomes our memory space
@ -1653,7 +1653,7 @@ filesys_mainloop_bcpl:
.got_bcpl
move.w #$FF40,d0 ; startup_handler
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #0,d0
jsr (a0)
move.l d0,d2
@ -1710,7 +1710,7 @@ FSML_loop:
beq.s .nodc
; call filesys_media_change_reply (pre)
move.w #$ff58,d0 ; fsmisc_helper
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #1,d0 ; filesys_media_change_reply
jsr (a0)
tst.l d0
@ -1720,7 +1720,7 @@ FSML_loop:
clr.b 172(a3)
; call filesys_media_change_reply (post)
move.w #$ff58,d0 ; fsmisc_helper
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #2,d0 ; filesys_media_change_reply
jsr (a0)
.nodc
@ -1761,7 +1761,7 @@ nonnotif
; It's a dummy packet indicating that some queued command finished.
move.w #$FF50,d0 ; exter_int_helper
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #1,d0
jsr (a0)
FSML_check_queue_other:
@ -1804,7 +1804,7 @@ FSML_FromDOS:
FSML_DoCommand:
bsr.b LockCheck ; Make sure there are enough locks for the C code to grab.
move.w #$FF30,d0 ; filesys_handler
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
tst.l d0
beq.b FSML_Reply
@ -1834,7 +1834,7 @@ FSML_ReplyOne2:
bne.s FSML_ReplyOne3
; Arghh.. we need more entries. (some buggy programs fail if eac_Entries = 0 with continue enabled)
move.w #$ff58,d0 ; fsmisc_helper
bsr.w getrtbase
bsr.w getrtbaselocal
moveq #0,d0 ; exall
jsr (a0)
bra.s .exaretry
@ -2213,7 +2213,7 @@ getgfxlimits:
move.w MH_FOO_MOFFSET(a5),d2
move.w #$FF38,d0
moveq #1,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
.nosend
@ -2259,7 +2259,7 @@ mousehack_task:
; send data structure address
move.w #$FF38,d0
moveq #5,d1
bsr.w getrtbase
bsr.w getrtbaselocal
move.l a4,d0
jsr (a0)
@ -2274,7 +2274,7 @@ mousehack_task:
moveq #5,d0 ;INTB_VERTB
jsr -$00a8(a6)
mhloop
mhloop:
move.l d6,d0
jsr -$013e(a6) ;Wait
@ -2356,7 +2356,7 @@ mhloop
;tell native side that mousehack is now active
move.w #$FF38,d0
moveq #0,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
bra.w mhloop
.yestim
@ -2547,7 +2547,7 @@ mhloop
jsr -$2a(a6) ;PeekQualifier
move.l (sp)+,a6
and.w #$7fff,d0
move.w d0,8(a2) ;ie_Qualifier
or.w d0,8(a2) ;ie_Qualifier
.mhvpre36
bsr.w mhdoio
@ -2626,7 +2626,7 @@ clipboard_init:
move.w #$FF38,d0
moveq #17,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
btst #0,d0
beq.s .noclip
@ -2642,7 +2642,7 @@ clipboard_init:
move.w #$FF38,d0
moveq #14,d1
bsr.w getrtbase
bsr.w getrtbaselocal
move.l a5,d0
jsr (a0)
@ -2660,7 +2660,7 @@ clipboard_init:
clipkill
move.w #$FF38,d0
moveq #10,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
rts
@ -2718,7 +2718,7 @@ prefsread:
bne.s .pr4
move.w #$FF38,d0
moveq #16,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
.pr1
move.l d4,d1
@ -2760,7 +2760,7 @@ clipboard_proc:
move.w #$FF38,d0
moveq #13,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
tst.l d0
beq.w clipdie
@ -2848,7 +2848,7 @@ cfversion
move.w #$FF38,d0
moveq #15,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
tst.l CLIP_WRITE_SIZE(a5)
bne.s clipsignal
@ -2875,7 +2875,7 @@ clipsignal
;and notify host-side
move.w #$FF38,d0
moveq #12,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
tst.l d0
beq.s .nowrite
@ -2945,7 +2945,7 @@ clipread:
jsr -$01c8(a6) ;DoIO
move.w #$FF38,d0
moveq #11,d1
bsr.w getrtbase
bsr.w getrtbaselocal
move.l 32(a4),d0
jsr (a0)
move.l a2,a1
@ -2987,7 +2987,7 @@ consolehook:
moveq #-1,d2
move.w #$FF38,d0
moveq #17,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
btst #1,d0
beq.s .ch2
@ -3006,7 +3006,7 @@ consolehook:
move.l a0,a1
move.w #$FF38,d0
moveq #101,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
moveq #1,d2
.ch1
@ -3020,7 +3020,7 @@ chook:
movem.l d0-d1/a0,-(sp)
move.w #$FF38,d0
moveq #102,d1
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
movem.l (sp)+,d0-d1/a0
rts
@ -3043,7 +3043,7 @@ debuggerproc
jsr -$0228(a6) ; OpenLibrary
moveq #2,d1
move.w #$FF78,d0
bsr.w getrtbase
bsr.w getrtbaselocal
move.l a0,a2
moveq #1,d1
jsr (a0) ; debugger init
@ -3198,7 +3198,7 @@ bcplwrapper_start:
move.l d2,d1
lea wb13ffspatches(pc),a1
move.w #$FF68,d0
bsr.w getrtbase
bsr.w getrtbaselocal
jsr (a0)
jmp (a0)
;CopyMem() patches
@ -3643,11 +3643,140 @@ hw_multi:
rts
; this is called from external executable
moverom:
; a0 = ram copy
move.l a0,a5 ; ram copy
moveq #20,d7
move.l 4.w,a6
jsr -$0084(a6) ;Forbid
move.w #$FF38,d0
bsr.w getrtbase
move.l a5,d2
moveq #19,d1
jsr (a0)
;ROM is now write-enabled
;d0 = temp space
tst.l d0
beq.w .mov1
move.l d0,a3
move.l (a3)+,a4 ; ROM
; Copy ROM to RAM
move.l a4,a0
move.l a5,a1
move.w #65536/4-1,d0
.mov5
move.l (a0)+,(a1)+
dbf d0,.mov5
move.l a5,d1
sub.l a4,d1
; Handle relocations from UAE side
; Relative
move.l a3,a0
.mov7
moveq #0,d0
move.w (a0)+,d0
beq.s .mov6
lea 0(a4,d0.l),a1
add.l d1,(a1)
lea 0(a5,d0.l),a1
add.l d1,(a1)
bra.s .mov7
.mov6
; Absolute
.mov9
moveq #0,d0
move.l (a0)+,d0
beq.s .mov8
move.l d0,a1
add.l d1,(a1)
bra.s .mov9
.mov8
moveq #0,d0
bsr.w getrtbase
lea getrtbase(pc),a1
sub.l a0,a1
add.l a5,a1
; replace RAM copy relative getrtbase
; fetch with absolute lea rombase,a0
move.w #$41f9,(a1)+
move.l a4,(a1)+
; and.l #$ffff,d0
move.w #$0280,(a1)+
move.l #$0000ffff,(a1)+
; add.l d0,a0; rts
move.l #$d1c04e75,(a1)
; redirect some commonly used
; functions to RAM code
lea moveromreloc(pc),a0
.mov3
moveq #0,d0
move.w (a0)+,d0
beq.s .mov2
add.w #8+4,d0
lea 0(a4,d0.l),a1
; JMP xxxxxxxx
move.w #$4ef9,(a1)+
lea 0(a5,d0.l),a2
move.l a2,(a1)
bra.s .mov3
.mov2
cmp.w #36,20(a6)
bcs.s .mov4
jsr -$27c(a6) ; CacheClearU
.mov4
; Tell UAE that all is done
; Re-enables write protection
move.w #$FF38,d0
bsr.w getrtbase
move.l a5,d2
moveq #20,d1
jsr (a0)
moveq #0,d7
.mov1
jsr -$008a(a6)
move.l d7,d0
rts
moveromreloc:
dc.w FSML_loop-start
dc.w mhloop-start
dc.w kaint-start
dc.w trap_task_wait-start
dc.w exter_task_wait-start
dc.w 0
cnop 0,4
getrtbaselocal:
lea start-8-4(pc),a0
and.l #$FFFF,d0
add.l d0,a0
rts
cnop 0,4
getrtbase:
lea start-8-4(pc),a0
and.l #$FFFF,d0
add.l d0,a0
rts
nop
nop
inp_dev: dc.b 'input.device',0
tim_dev: dc.b 'timer.device',0

View File

@ -8674,12 +8674,21 @@ static uae_u32 REGPARAM2 mousehack_done (TrapContext *ctx)
v |= 1;
if (consolehook_activate())
v |= 2;
if (currprefs.uaeboard > 2)
v |= 4;
trap_dos_active();
return v;
} else if (mode == 18) {
put_long_host(rtarea_bank.baseaddr + RTAREA_EXTERTASK, trap_get_dreg(ctx, 0));
put_long_host(rtarea_bank.baseaddr + RTAREA_TRAPTASK, trap_get_dreg(ctx, 2));
return rtarea_base + RTAREA_HEARTBEAT;
} else if (mode == 19) {
// boot rom copy
// d2 = ram address
return boot_rom_copy(ctx, trap_get_dreg(ctx, 2), 0);
} else if (mode == 20) {
// boot rom copy done
return boot_rom_copy(ctx, trap_get_dreg(ctx, 2), 1);
} else if (mode == 101) {
consolehook_ret(ctx, trap_get_areg(ctx, 1), trap_get_areg(ctx, 2));
} else if (mode == 102) {

View File

@ -1,10 +1,10 @@
db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00);
db(0x60); db(0x02); db(0x00); db(0x0b); db(0x60); db(0x00); db(0x0d); db(0xc6);
db(0x00); db(0x00); db(0x0b); db(0x2c); db(0x00); db(0x00); db(0x00); db(0xa8);
db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x2c);
db(0x00); db(0x00); db(0x20); db(0x86); db(0x00); db(0x00); db(0x00); db(0x2c);
db(0x00); db(0x00); db(0x05); db(0x86); db(0x00); db(0x00); db(0x1c); db(0x8c);
db(0x00); db(0x00); db(0x00); db(0x64); db(0x00); db(0x00); db(0x1c); db(0xe8);
db(0x00); db(0x00); db(0x1d); db(0x3a); db(0x43); db(0xfa); db(0x21); db(0x79);
db(0x00); db(0x00); db(0x1d); db(0x3a); db(0x43); db(0xfa); db(0x22); db(0x57);
db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28);
db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75);
db(0x00); db(0x00); db(0x00); db(0x07); db(0x00); db(0x00); db(0x00); db(0x00);
@ -12,21 +12,21 @@
db(0x60); db(0x00); db(0x0d); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x00);
db(0x00); db(0x00); db(0x00); db(0x01); db(0x00); db(0x00); db(0x00); db(0x04);
db(0x00); db(0x00); db(0x00); db(0x02); db(0x48); db(0xe7); db(0x3f); db(0x3e);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x21); db(0x57);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x22); db(0x35);
db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x22); db(0x00);
db(0x30); db(0x3c); db(0x3f); db(0xf8); db(0x61); db(0x00); db(0x20); db(0x08);
db(0x20); db(0x81); db(0x43); db(0xfa); db(0x21); db(0x2f); db(0x70); db(0x00);
db(0x30); db(0x3c); db(0x3f); db(0xf8); db(0x61); db(0x00); db(0x20); db(0xe2);
db(0x20); db(0x81); db(0x43); db(0xfa); db(0x22); db(0x0d); db(0x70); db(0x00);
db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x22); db(0x00); db(0x30); db(0x3c);
db(0x3f); db(0xf4); db(0x61); db(0x00); db(0x1f); db(0xf2); db(0x20); db(0x81);
db(0x3f); db(0xf4); db(0x61); db(0x00); db(0x20); db(0xcc); db(0x20); db(0x81);
db(0x61); db(0x00); db(0x16); db(0x58); db(0x61); db(0x00); db(0x1a); db(0x20);
db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x70); db(0x00); db(0x4e); db(0x75);
db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04);
db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x1f); db(0xd0);
db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x20); db(0xaa);
db(0x2a); db(0x50); db(0x7a); db(0x00); db(0x70); db(0x00); db(0x0c); db(0x6e);
db(0x00); db(0x21); db(0x00); db(0x14); db(0x65); db(0x1c); db(0x43); db(0xfa);
db(0x21); db(0x0e); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae);
db(0x21); db(0xec); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae);
db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0c); db(0x43); db(0xfa);
db(0x20); db(0xfe); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae);
db(0x21); db(0xdc); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae);
db(0xfd); db(0xd8); db(0x28); db(0x40); db(0xc9); db(0x4e); db(0x20); db(0x0e);
db(0x67); db(0x3c); db(0x08); db(0x2d); db(0x00); db(0x04); db(0x01); db(0x13);
db(0x66); db(0x34); db(0x4e); db(0xae); db(0xff); db(0xd0); db(0x4a); db(0x80);
@ -54,21 +54,21 @@
db(0x00); db(0x22); db(0x00); db(0x14); db(0x65); db(0x6e); db(0x78); db(0x03);
db(0x0c); db(0x6e); db(0x00); db(0x24); db(0x00); db(0x14); db(0x65); db(0x04);
db(0x00); db(0x44); db(0x01); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x80);
db(0x61); db(0x00); db(0x1e); db(0xcc); db(0x4e); db(0x90); db(0x2a); db(0x00);
db(0x61); db(0x00); db(0x1f); db(0xa6); db(0x4e); db(0x90); db(0x2a); db(0x00);
db(0x20); db(0x49); db(0x20); db(0x01); db(0x67); db(0x0c); db(0x22); db(0x04);
db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x20); db(0x30); db(0x4e); db(0xae);
db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x21); db(0x0e); db(0x4e); db(0xae);
db(0xfd); db(0x96); db(0x43); db(0xf9); db(0x00); db(0x21); db(0x00); db(0x00);
db(0x4e); db(0xae); db(0xfd); db(0xea); db(0x4a); db(0x80); db(0x66); db(0x18);
db(0x22); db(0x04); db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20);
db(0x00); db(0x00); db(0x20); db(0x05); db(0x90); db(0x88); db(0x65); db(0x08);
db(0x67); db(0x06); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfd); db(0x96);
db(0x41); db(0xfa); db(0x1f); db(0x56); db(0x43); db(0xfa); db(0x00); db(0x5a);
db(0x41); db(0xfa); db(0x20); db(0x34); db(0x43); db(0xfa); db(0x00); db(0x5a);
db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0f); db(0x3c); db(0x22); db(0x40);
db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00);
db(0x1e); db(0x76); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff);
db(0x1f); db(0x50); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff);
db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3c); db(0x22); db(0x7a); db(0x00);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00); db(0x28); db(0x01);
db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); db(0x1f); db(0x79);
db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); db(0x20); db(0x57);
db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80);
db(0x67); db(0x16); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0xe4); db(0x8b);
db(0x4e); db(0xae); db(0xff); db(0x76); db(0x2a); db(0x00); db(0x22); db(0x4e);
@ -76,18 +76,18 @@
db(0x20); db(0x05); db(0x4c); db(0xdf); db(0x44); db(0x3c); db(0x4e); db(0x75);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0);
db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa);
db(0x1f); db(0x19); db(0x43); db(0xfa); db(0x00); db(0x14); db(0x70); db(0x0f);
db(0x1f); db(0xf7); db(0x43); db(0xfa); db(0x00); db(0x14); db(0x70); db(0x0f);
db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00);
db(0xff); db(0xa2); db(0x60); db(0xdc); db(0x00); db(0x00); db(0x00); db(0x10);
db(0x00); db(0x00); db(0x00); db(0x00); db(0x72); db(0x02); db(0x30); db(0x3c);
db(0xff); db(0x48); db(0x61); db(0x00); db(0x1d); db(0xfa); db(0x4e); db(0x90);
db(0xff); db(0x48); db(0x61); db(0x00); db(0x1e); db(0xc4); db(0x4e); db(0x90);
db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x0a); db(0x90);
db(0x70); db(0x00); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04);
db(0x20); db(0x3c); db(0x00); db(0x00); db(0x01); db(0x00); db(0x4e); db(0xae);
db(0xfe); db(0xc2); db(0x7e); db(0x00); db(0x20); db(0x3c); db(0x00); db(0x00);
db(0xf0); db(0x00); db(0x61); db(0x00); db(0x1d); db(0xd2); db(0x22); db(0x48);
db(0xf0); db(0x00); db(0x61); db(0x00); db(0x1e); db(0xac); db(0x22); db(0x48);
db(0x20); db(0x3c); db(0x00); db(0x00); db(0x40); db(0x00); db(0x61); db(0x00);
db(0x1d); db(0xc6); db(0x7c); db(0x03); db(0x4a); db(0x29); db(0x00); db(0x03);
db(0x1e); db(0xa0); db(0x7c); db(0x03); db(0x4a); db(0x29); db(0x00); db(0x03);
db(0x67); db(0x42); db(0x0c); db(0x29); db(0x00); db(0xfd); db(0x00); db(0x07);
db(0x66); db(0x3a); db(0x52); db(0x87); db(0x49); db(0xe8); db(0x00); db(0x54);
db(0x4b); db(0xe9); db(0x00); db(0x04); db(0x48); db(0xe7); db(0x03); db(0xce);
@ -102,7 +102,7 @@
db(0xff); db(0x8a); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x3c);
db(0x00); db(0x00); db(0x01); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0xc2);
db(0x7e); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00);
db(0x1d); db(0x4e); db(0x20); db(0x07); db(0x4e); db(0x90); db(0x4a); db(0x80);
db(0x1e); db(0x18); db(0x20); db(0x07); db(0x4e); db(0x90); db(0x4a); db(0x80);
db(0x67); db(0x00); db(0xff); db(0xe4); db(0x7e); db(0x0b); db(0x0c); db(0x40);
db(0x00); db(0x01); db(0x6d); db(0x00); db(0xff); db(0xe6); db(0x6e); db(0x06);
db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xdc); db(0x0c); db(0x40);
@ -121,30 +121,30 @@
db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10); db(0x22); db(0x4a);
db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x6c);
db(0x0c); db(0x40); db(0x00); db(0x06); db(0x6e); db(0x00); db(0xff); db(0x64);
db(0x41); db(0xfa); db(0x1e); db(0x46); db(0x43); db(0xfa); db(0x00); db(0x42);
db(0x41); db(0xfa); db(0x1f); db(0x24); db(0x43); db(0xfa); db(0x00); db(0x42);
db(0x70); db(0x01); db(0x22); db(0x3c); db(0x00); db(0x00); db(0x27); db(0x10);
db(0x61); db(0x00); db(0xfe); db(0x38); db(0x22); db(0x00); db(0x30); db(0x3c);
db(0xff); db(0x50); db(0x61); db(0x00); db(0x1c); db(0x9a); db(0x70); db(0x14);
db(0xff); db(0x50); db(0x61); db(0x00); db(0x1d); db(0x64); db(0x70); db(0x14);
db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x3e); db(0x70); db(0x00);
db(0x20); db(0x59); db(0x4a); db(0x10); db(0x67); db(0x10); db(0x2c); db(0x59);
db(0x22); db(0x51); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x01); db(0x00);
db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x70); db(0x01); db(0x4a); db(0x40);
db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10);
db(0x00); db(0x00); db(0x00); db(0x00); db(0x2c); db(0x78); db(0x00); db(0x04);
db(0x43); db(0xfa); db(0x1d); db(0x85); db(0x70); db(0x00); db(0x4e); db(0xae);
db(0x43); db(0xfa); db(0x1e); db(0x63); db(0x70); db(0x00); db(0x4e); db(0xae);
db(0xfd); db(0xd8); db(0x2a); db(0x40); db(0xcb); db(0x4e); db(0x60); db(0x0e);
db(0xcb); db(0x4e); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d);
db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0xcb); db(0x4e); db(0x30); db(0x3c);
db(0xff); db(0x50); db(0x61); db(0x00); db(0x1c); db(0x42); db(0x70); db(0x15);
db(0xff); db(0x50); db(0x61); db(0x00); db(0x1d); db(0x0c); db(0x70); db(0x15);
db(0x4e); db(0x90); db(0x2e); db(0x08); db(0x67); db(0xe2); db(0x28); db(0x4f);
db(0x4f); db(0xef); db(0xfd); db(0xd8); db(0x2c); db(0x0f); db(0x24); db(0x46);
db(0x47); db(0xea); db(0x00); db(0x28); db(0x22); db(0x4b); db(0x20); db(0x47);
db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x20); db(0x47); db(0x42); db(0x10);
db(0x24); db(0xfc); db(0x80); db(0x00); db(0x00); db(0x21); db(0x41); db(0xfa);
db(0x1c); db(0x73); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
db(0x1d); db(0x51); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x24); db(0xc0);
db(0x24); db(0xfc); db(0x80); db(0x00); db(0x00); db(0x22); db(0x41); db(0xfa);
db(0x1c); db(0x5b); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xff); db(0xe2);
db(0x1d); db(0x39); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xff); db(0xe2);
db(0x24); db(0xc0); db(0x24); db(0xfc); db(0x80); db(0x00); db(0x00); db(0x23);
db(0x70); db(0xff); db(0x24); db(0xc0); db(0x42); db(0x9a); db(0x42); db(0x92);
db(0x0c); db(0x6e); db(0x00); db(0x24); db(0x00); db(0x14); db(0x64); db(0x20);
@ -154,19 +154,19 @@
db(0x00); db(0x0c); db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x60); db(0x08);
db(0x22); db(0x0b); db(0x24); db(0x06); db(0x4e); db(0xae); db(0xfd); db(0xa2);
db(0x2e); db(0x4c); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00);
db(0x1b); db(0xae); db(0x70); db(0x16); db(0x4e); db(0x90); db(0x60); db(0x00);
db(0x1c); db(0x78); db(0x70); db(0x16); db(0x4e); db(0x90); db(0x60); db(0x00);
db(0xff); db(0x50); db(0x48); db(0xe7); db(0xf0); db(0xf8); db(0x24); db(0x00);
db(0x26); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x12);
db(0x61); db(0x00); db(0x1b); db(0x94); db(0x20); db(0x02); db(0x24); db(0x03);
db(0x61); db(0x00); db(0x1c); db(0x5e); db(0x20); db(0x02); db(0x24); db(0x03);
db(0x4e); db(0x90); db(0x24); db(0x40); db(0x70); db(0x2a); db(0x22); db(0x3c);
db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a);
db(0x28); db(0x40); db(0x47); db(0xec); db(0x00); db(0x16); db(0x22); db(0x4b);
db(0x22); db(0xca); db(0x22); db(0xc2); db(0x22); db(0xc3); db(0x30); db(0x3c);
db(0x3f); db(0xf4); db(0x61); db(0x00); db(0x1b); db(0x6a); db(0x22); db(0xc8);
db(0x30); db(0x3c); db(0x3f); db(0xf0); db(0x61); db(0x00); db(0x1b); db(0x60);
db(0x3f); db(0xf4); db(0x61); db(0x00); db(0x1c); db(0x44); db(0x22); db(0xc8);
db(0x30); db(0x3c); db(0x3f); db(0xf0); db(0x61); db(0x00); db(0x1c); db(0x3a);
db(0x22); db(0xc8); db(0x29); db(0x4b); db(0x00); db(0x0e); db(0x19); db(0x7c);
db(0x00); db(0x02); db(0x00); db(0x08); db(0x19); db(0x7c); db(0x00); db(0xf6);
db(0x00); db(0x09); db(0x41); db(0xfa); db(0x1b); db(0xfe); db(0x29); db(0x48);
db(0x00); db(0x09); db(0x41); db(0xfa); db(0x1c); db(0xdc); db(0x29); db(0x48);
db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0x14); db(0x29); db(0x48);
db(0x00); db(0x12); db(0x22); db(0x4c); db(0x70); db(0x05); db(0x4e); db(0xae);
db(0xff); db(0x58); db(0x4c); db(0xdf); db(0x1f); db(0x0f); db(0x4e); db(0x75);
@ -177,23 +177,23 @@
db(0x67); db(0x08); db(0x22); db(0x69); db(0x00); db(0x10); db(0x22); db(0xa8);
db(0x00); db(0x44); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7);
db(0xf1); db(0xe0); db(0x2e); db(0x00); db(0x20); db(0x3c); db(0x00); db(0x00);
db(0xff); db(0xfc); db(0x61); db(0x00); db(0x1a); db(0xf2); db(0x24); db(0x48);
db(0xff); db(0xfc); db(0x61); db(0x00); db(0x1b); db(0xcc); db(0x24); db(0x48);
db(0x74); db(0x00); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x10);
db(0x41); db(0xfa); db(0x1b); db(0xc1); db(0x43); db(0xfa); db(0xfd); db(0x7c);
db(0x41); db(0xfa); db(0x1c); db(0x9f); db(0x43); db(0xfa); db(0xfd); db(0x7c);
db(0x70); db(0x14); db(0x61); db(0x00); db(0x0b); db(0x94); db(0x24); db(0x00);
db(0x76); db(0x00); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x10);
db(0x41); db(0xfa); db(0x1b); db(0xb7); db(0x43); db(0xfa); db(0xfc); db(0xde);
db(0x41); db(0xfa); db(0x1c); db(0x95); db(0x43); db(0xfa); db(0xfc); db(0xde);
db(0x70); db(0x19); db(0x61); db(0x00); db(0x0b); db(0x7c); db(0x26); db(0x00);
db(0x70); db(0x2a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xe9);
db(0x00); db(0x1a); db(0x20); db(0xca); db(0x20); db(0xce); db(0x20); db(0xc2);
db(0x20); db(0x83); db(0x41); db(0xfa); db(0x1b); db(0x65); db(0x23); db(0x48);
db(0x20); db(0x83); db(0x41); db(0xfa); db(0x1c); db(0x43); db(0x23); db(0x48);
db(0x00); db(0x0a); db(0x45); db(0xe9); db(0x00); db(0x1a); db(0x23); db(0x4a);
db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xfe); db(0x02); db(0x23); db(0x48);
db(0x00); db(0x12); db(0x33); db(0x7c); db(0x02); db(0x14); db(0x00); db(0x08);
db(0x70); db(0x03); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x20); db(0x02);
db(0x22); db(0x03); db(0x61); db(0x00); db(0xfe); db(0xd6); db(0x30); db(0x3c);
db(0xff); db(0x38); db(0x72); db(0x04); db(0x61); db(0x00); db(0x1a); db(0x70);
db(0xff); db(0x38); db(0x72); db(0x04); db(0x61); db(0x00); db(0x1b); db(0x3a);
db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00);
db(0x0b); db(0x7c); db(0x4c); db(0xdf); db(0x07); db(0x8f); db(0x4e); db(0x75);
db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04);
@ -203,7 +203,7 @@
db(0x43); db(0xeb); db(0x01); db(0xac); db(0x11); db(0xb1); db(0x00); db(0x00);
db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); db(0x00); db(0x8c);
db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x21); db(0x40);
db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x1a); db(0xe3);
db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x1b); db(0xc1);
db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x9c);
db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10);
db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7);
@ -241,13 +241,13 @@
db(0x60); db(0xf2); db(0x48); db(0xe7); db(0x40); db(0xf2); db(0x26); db(0x48);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50);
db(0x20); db(0x50); db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68);
db(0x00); db(0x0a); db(0x45); db(0xfa); db(0x1a); db(0x54); db(0x10); db(0x19);
db(0x00); db(0x0a); db(0x45); db(0xfa); db(0x1b); db(0x32); db(0x10); db(0x19);
db(0x12); db(0x1a); db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00);
db(0x67); db(0x46); db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2);
db(0x70); db(0x20); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c);
db(0x00); db(0x08); db(0x00); db(0x08); db(0x41); db(0xfa); db(0x1a); db(0x2a);
db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x19); db(0x83);
db(0x00); db(0x08); db(0x00); db(0x08); db(0x41); db(0xfa); db(0x1b); db(0x08);
db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x1a); db(0x61);
db(0x25); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12);
db(0x20); db(0x88); db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08);
db(0x41); db(0xee); db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae);
@ -358,8 +358,8 @@
db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x20); db(0x6c); db(0x00); db(0x24);
db(0x4a); db(0x90); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfc); db(0x4c);
db(0x21); db(0x40); db(0x01); db(0x9c); db(0x2f); db(0x08); db(0x30); db(0x3c);
db(0xff); db(0xec); db(0x61); db(0x00); db(0x15); db(0x4a); db(0x2a); db(0x50);
db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x15); db(0x40);
db(0xff); db(0xec); db(0x61); db(0x00); db(0x16); db(0x24); db(0x2a); db(0x50);
db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x16); db(0x0a);
db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90);
db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); db(0x26); db(0x00);
db(0x0c); db(0x43); db(0xff); db(0xfe); db(0x67); db(0x00); db(0xf6); db(0xba);
@ -367,11 +367,11 @@
db(0x2f); db(0x08); db(0x72); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04);
db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x21); db(0x40);
db(0x01); db(0x94); db(0x4a); db(0x83); db(0x6a); db(0x0e); db(0x22); db(0x48);
db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x15); db(0x00);
db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x15); db(0xca);
db(0x4e); db(0x90); db(0x60); db(0x26); db(0x2c); db(0x4c); db(0x2f); db(0x08);
db(0x61); db(0x00); db(0x0f); db(0xf6); db(0x20); db(0x5f); db(0x22); db(0x48);
db(0x26); db(0x40); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00);
db(0x14); db(0xe6); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40);
db(0x15); db(0xb0); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40);
db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40);
db(0x00); db(0x20); db(0x20); db(0x69); db(0x01); db(0x94); db(0x4a); db(0xa9);
db(0x01); db(0x90); db(0x67); db(0x2c); db(0x20); db(0x08); db(0x67); db(0x32);
@ -383,9 +383,9 @@
db(0x4a); db(0xa9); db(0x01); db(0x98); db(0x67); db(0x04); db(0x61); db(0x00);
db(0xfa); db(0x38); db(0x4a); db(0x83); db(0x6b); db(0x00); db(0xf6); db(0x22);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x2f); db(0x09); db(0x43); db(0xfa);
db(0x16); db(0x0c); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x22); db(0x5f);
db(0x16); db(0xea); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x22); db(0x5f);
db(0x22); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00);
db(0x14); db(0x76); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29);
db(0x15); db(0x40); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29);
db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x24); db(0x27); db(0x7c);
db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); db(0x41); db(0xfa);
db(0xf3); db(0xd4); db(0x70); db(0xff); db(0x22); db(0x0c); db(0x66); db(0x06);
@ -413,7 +413,7 @@
db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x42); db(0x20); db(0x52);
db(0x24); db(0x40); db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc);
db(0x13); db(0x7c); db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x14); db(0xb1);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x15); db(0x8f);
db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x2c); db(0x40); db(0x22); db(0x0a);
db(0x26); db(0x0f); db(0x4f); db(0xea); db(0x10); db(0x04); db(0x4e); db(0xae);
db(0xff); db(0x52); db(0x2e); db(0x43); db(0x26); db(0x01); db(0x22); db(0x4e);
@ -421,9 +421,9 @@
db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e);
db(0x22); db(0x03); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7);
db(0x3f); db(0x3e); db(0x2c); db(0x01); db(0x7e); db(0x06); db(0x2c); db(0x78);
db(0x00); db(0x04); db(0x43); db(0xfa); db(0x14); db(0xa2); db(0x70); db(0x24);
db(0x00); db(0x04); db(0x43); db(0xfa); db(0x15); db(0x80); db(0x70); db(0x24);
db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0e);
db(0x08); db(0x87); db(0x00); db(0x02); db(0x43); db(0xfa); db(0x14); db(0x90);
db(0x08); db(0x87); db(0x00); db(0x02); db(0x43); db(0xfa); db(0x15); db(0x6e);
db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40);
db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x38); db(0x22); db(0x3c);
db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a);
@ -435,7 +435,7 @@
db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x38); db(0x4e); db(0xae);
db(0xff); db(0x2e); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62);
db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x30); db(0x3c);
db(0xff); db(0x58); db(0x61); db(0x00); db(0x12); db(0xe2); db(0x70); db(0x03);
db(0xff); db(0x58); db(0x61); db(0x00); db(0x13); db(0xac); db(0x70); db(0x03);
db(0x4e); db(0x90); db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x23); db(0x40);
db(0x00); db(0x20); db(0x67); db(0x16); db(0x70); db(0x00); db(0x23); db(0x40);
db(0x00); db(0x24); db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c);
@ -443,9 +443,9 @@
db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x7e); db(0x00); db(0x2c); db(0x78);
db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda);
db(0x20); db(0x40); db(0x4b); db(0xe8); db(0x00); db(0x5c); db(0x43); db(0xfa);
db(0x13); db(0xc7); db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x24); db(0x40);
db(0x14); db(0xa5); db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x24); db(0x40);
db(0x22); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbc); db(0x30); db(0x3c);
db(0xff); db(0x40); db(0x61); db(0x00); db(0x12); db(0x92); db(0x70); db(0x01);
db(0xff); db(0x40); db(0x61); db(0x00); db(0x13); db(0x5c); db(0x70); db(0x01);
db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x66); db(0x0c); db(0x20); db(0x01);
db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae);
db(0xff); db(0x3a); db(0x26); db(0x40); db(0x7c); db(0x00); db(0x26); db(0x86);
@ -453,14 +453,14 @@
db(0x27); db(0x4a); db(0x00); db(0xa0); db(0x50); db(0xeb); db(0x00); db(0x9e);
db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0xb8); db(0x93); db(0xc9);
db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0);
db(0x41); db(0xfa); db(0x12); db(0x62); db(0x70); db(0x00); db(0x72); db(0x00);
db(0x41); db(0xfa); db(0x13); db(0x40); db(0x70); db(0x00); db(0x72); db(0x00);
db(0x61); db(0x00); db(0x02); db(0xcc); db(0x27); db(0x40); db(0x00); db(0xa4);
db(0x41); db(0xfa); db(0x12); db(0x5f); db(0x70); db(0x00); db(0x72); db(0x00);
db(0x41); db(0xfa); db(0x13); db(0x3d); db(0x70); db(0x00); db(0x72); db(0x00);
db(0x61); db(0x00); db(0x02); db(0xbc); db(0x27); db(0x40); db(0x00); db(0xa8);
db(0x7a); db(0x00); db(0x26); db(0x07); db(0x66); db(0x12); db(0x20); db(0x4d);
db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x4e); db(0xae);
db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); db(0x00); db(0x0a);
db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); db(0x12); db(0x18);
db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); db(0x12); db(0xe2);
db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); db(0x61); db(0x00);
db(0xfb); db(0xc2); db(0x70); db(0x01); db(0x61); db(0x00); db(0xf9); db(0x72);
db(0x08); db(0x02); db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01);
@ -474,10 +474,10 @@
db(0x00); db(0x01); db(0x00); db(0xad); db(0x67); db(0x0a); db(0x61); db(0x00);
db(0x0c); db(0x62); db(0x08); db(0xab); db(0x00); db(0x01); db(0x00); db(0xad);
db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x67); db(0x24); db(0x30); db(0x3c);
db(0xff); db(0x58); db(0x61); db(0x00); db(0x11); db(0xaa); db(0x70); db(0x01);
db(0xff); db(0x58); db(0x61); db(0x00); db(0x12); db(0x74); db(0x70); db(0x01);
db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00);
db(0xfb); db(0x78); db(0x42); db(0x2b); db(0x00); db(0xac); db(0x30); db(0x3c);
db(0xff); db(0x58); db(0x61); db(0x00); db(0x11); db(0x92); db(0x70); db(0x02);
db(0xff); db(0x58); db(0x61); db(0x00); db(0x12); db(0x5c); db(0x70); db(0x02);
db(0x4e); db(0x90); db(0x20); db(0x0c); db(0x67); db(0x56); db(0x0c); db(0x6c);
db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4e); db(0x0c); db(0xac);
db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x44);
@ -492,7 +492,7 @@
db(0x60); db(0x00); db(0xff); db(0x3e); db(0x74); db(0xfe); db(0x20); db(0x0c);
db(0x67); db(0x14); db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x42);
db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00);
db(0x11); db(0x1e); db(0x70); db(0x01); db(0x4e); db(0x90); db(0x45); db(0xeb);
db(0x11); db(0xe8); db(0x70); db(0x01); db(0x4e); db(0x90); db(0x45); db(0xeb);
db(0x00); db(0x04); db(0x20); db(0x52); db(0x20); db(0x08); db(0x67); db(0x00);
db(0xff); db(0x18); db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28);
db(0x00); db(0x04); db(0xb4); db(0x80); db(0x66); db(0x16); db(0x48); db(0xe7);
@ -502,7 +502,7 @@
db(0x60); db(0xd2); db(0x0c); db(0x85); db(0x00); db(0x00); db(0x00); db(0x14);
db(0x65); db(0x00); db(0x00); db(0x0a); db(0x70); db(0x01); db(0x29); db(0x40);
db(0x00); db(0x04); db(0x60); db(0x12); db(0x61); db(0x5e); db(0x30); db(0x3c);
db(0xff); db(0x30); db(0x61); db(0x00); db(0x10); db(0xca); db(0x4e); db(0x90);
db(0xff); db(0x30); db(0x61); db(0x00); db(0x11); db(0x94); db(0x4e); db(0x90);
db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x52); db(0x85); db(0x28); db(0xab);
db(0x00); db(0x04); db(0x27); db(0x4c); db(0x00); db(0x04); db(0x60); db(0x00);
db(0xfe); db(0xc0); db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00);
@ -510,7 +510,7 @@
db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); db(0xfa); db(0x3a);
db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09); db(0x00); db(0x08);
db(0x66); db(0x14); db(0x61); db(0x00); db(0xfa); db(0x92); db(0x66); db(0x0e);
db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x10); db(0x88);
db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x11); db(0x52);
db(0x70); db(0x00); db(0x4e); db(0x90); db(0x60); db(0xec); db(0x22); db(0x54);
db(0x20); db(0x6c); db(0x00); db(0x04); db(0x29); db(0x4d); db(0x00); db(0x04);
db(0x4e); db(0xee); db(0xfe); db(0x92); db(0x2f); db(0x05); db(0x7a); db(0xfc);
@ -562,7 +562,7 @@
db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b); db(0x00); db(0x36);
db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); db(0x24); db(0x09);
db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); db(0x4c); db(0xdf);
db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x0f); db(0x8b);
db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x10); db(0x69);
db(0x43); db(0xfa); db(0x01); db(0x50); db(0x70); db(0x13); db(0x61); db(0x00);
db(0xff); db(0x98); db(0x4e); db(0x75); db(0x9e); db(0xfc); db(0x00); db(0x18);
db(0x42); db(0x92); db(0x42); db(0xaa); db(0x00); db(0x0e); db(0x42); db(0xaa);
@ -604,7 +604,7 @@
db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04);
db(0x47); db(0xed); db(0x00); db(0x90); db(0x34); db(0x2d); db(0x00); db(0x2c);
db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00);
db(0x0d); db(0x9e); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f);
db(0x0e); db(0x68); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f);
db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x3e); db(0x2e);
db(0x00); db(0x14); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6);
db(0x7c); db(0x00); db(0x01); db(0xc6); db(0x93); db(0xc9); db(0x4e); db(0xae);
@ -612,47 +612,47 @@
db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x70); db(0x00); db(0x30); db(0x3c);
db(0x02); db(0x14); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x30); db(0x3c);
db(0x3e); db(0x00); db(0x61); db(0x00); db(0x0d); db(0x5a); db(0x2b); db(0x48);
db(0x3e); db(0x00); db(0x61); db(0x00); db(0x0e); db(0x34); db(0x2b); db(0x48);
db(0x02); db(0x10); db(0x28); db(0x48); db(0x47); db(0xed); db(0x00); db(0x16);
db(0x27); db(0x4e); db(0x00); db(0x10); db(0x27); db(0x4a); db(0x00); db(0x08);
db(0x27); db(0x46); db(0x00); db(0x0c); db(0x70); db(0xff); db(0x37); db(0x40);
db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x05);
db(0x61); db(0x00); db(0x0d); db(0x34); db(0x20); db(0x0c); db(0x4e); db(0x90);
db(0x61); db(0x00); db(0x0d); db(0xfe); db(0x20); db(0x0c); db(0x4e); db(0x90);
db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c); db(0x00); db(0x02);
db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05); db(0x00); db(0x09);
db(0x41); db(0xfa); db(0x0d); db(0xbf); db(0x23); db(0x48); db(0x00); db(0x0a);
db(0x41); db(0xfa); db(0x0e); db(0x9d); db(0x23); db(0x48); db(0x00); db(0x0a);
db(0x41); db(0xfa); db(0x03); db(0x2e); db(0x23); db(0x48); db(0x00); db(0x12);
db(0x23); db(0x4d); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae);
db(0xff); db(0x58); db(0x20); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0xc2);
db(0x70); db(0x00); db(0x53); db(0xab); db(0x00); db(0x1c); db(0x6a); db(0x06);
db(0x70); db(0x0a); db(0x27); db(0x40); db(0x00); db(0x1c); db(0x4a); db(0xab);
db(0x00); db(0x14); db(0x66); db(0x22); db(0x4a); db(0xab); db(0x00); db(0x1c);
db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x0e); db(0x0f); db(0x70); db(0x00);
db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x0e); db(0xed); db(0x70); db(0x00);
db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x14);
db(0x67); db(0xd0); db(0x22); db(0x00); db(0x30); db(0x3c); db(0x3f); db(0xf4);
db(0x61); db(0x00); db(0x0c); db(0xcc); db(0x20); db(0x81); db(0x4a); db(0xab);
db(0x61); db(0x00); db(0x0d); db(0xa6); db(0x20); db(0x81); db(0x4a); db(0xab);
db(0x00); db(0x18); db(0x66); db(0x24); db(0x4a); db(0xab); db(0x00); db(0x1c);
db(0x66); db(0xb8); db(0x43); db(0xfa); db(0x0d); db(0xf9); db(0x70); db(0x00);
db(0x66); db(0xb8); db(0x43); db(0xfa); db(0x0e); db(0xd7); db(0x70); db(0x00);
db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x18);
db(0x67); db(0x00); db(0xff); db(0xa8); db(0x22); db(0x00); db(0x30); db(0x3c);
db(0x3f); db(0xf8); db(0x61); db(0x00); db(0x0c); db(0xa2); db(0x20); db(0x81);
db(0x3f); db(0xf8); db(0x61); db(0x00); db(0x0d); db(0x7c); db(0x20); db(0x81);
db(0x4a); db(0xad); db(0x02); db(0x08); db(0x66); db(0x3a); db(0x4a); db(0xab);
db(0x00); db(0x1c); db(0x66); db(0x8e); db(0x4e); db(0xae); db(0xff); db(0x7c);
db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x0c); db(0x96);
db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x0d); db(0x74);
db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae);
db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00); db(0xff); db(0x74);
db(0x41); db(0xfa); db(0x0c); db(0x82); db(0x70); db(0x00); db(0x72); db(0x00);
db(0x41); db(0xfa); db(0x0d); db(0x60); db(0x70); db(0x00); db(0x72); db(0x00);
db(0x61); db(0x00); db(0xfc); db(0xec); db(0x2b); db(0x40); db(0x02); db(0x08);
db(0x67); db(0x00); db(0x02); db(0x52); db(0x60); db(0x00); db(0xff); db(0x5c);
db(0x4a); db(0xad); db(0x02); db(0x0c); db(0x66); db(0x48); db(0x4a); db(0xab);
db(0x00); db(0x1c); db(0x66); db(0x00); db(0xff); db(0x4e); db(0x4e); db(0xae);
db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa);
db(0x0c); db(0x61); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00);
db(0x0d); db(0x3f); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00);
db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00);
db(0xff); db(0x32); db(0x41); db(0xfa); db(0x0c); db(0x4d); db(0x70); db(0x00);
db(0xff); db(0x32); db(0x41); db(0xfa); db(0x0d); db(0x2b); db(0x70); db(0x00);
db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xaa); db(0x2b); db(0x40);
db(0x02); db(0x0c); db(0x67); db(0x00); db(0x02); db(0x10); db(0x30); db(0x3c);
db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); db(0x0c); db(0x18);
db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); db(0x0c); db(0xe2);
db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x0e); db(0x0c); db(0x47);
db(0x00); db(0x24); db(0x65); db(0x18); db(0x0c); db(0x47); db(0x00); db(0x32);
db(0x64); db(0x12); db(0x53); db(0xab); db(0x00); db(0x34); db(0x6a); db(0x0c);
@ -716,7 +716,7 @@
db(0x00); db(0x14); db(0x65); db(0x18); db(0x2f); db(0x0e); db(0x2c); db(0x6d);
db(0x02); db(0x08); db(0x2c); db(0x6e); db(0x00); db(0x14); db(0x4e); db(0xae);
db(0xff); db(0xd6); db(0x2c); db(0x5f); db(0x02); db(0x40); db(0x7f); db(0xff);
db(0x35); db(0x40); db(0x00); db(0x08); db(0x61); db(0x00); db(0xfb); db(0x3e);
db(0x81); db(0x6a); db(0x00); db(0x08); db(0x61); db(0x00); db(0xfb); db(0x3e);
db(0x60); db(0x00); db(0xfd); db(0x10); db(0x4e); db(0x75); db(0x22); db(0x2c);
db(0x00); db(0x22); db(0x70); db(0x00); db(0x08); db(0x01); db(0x00); db(0x00);
db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0e); db(0x08); db(0x01);
@ -731,29 +731,29 @@
db(0x22); db(0x69); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0xbc);
db(0x22); db(0x5f); db(0x53); db(0x69); db(0x00); db(0x46); db(0x6a); db(0x10);
db(0x33); db(0x7c); db(0x00); db(0x32); db(0x00); db(0x46); db(0x30); db(0x3c);
db(0xff); db(0xff); db(0x61); db(0x00); db(0x09); db(0xa2); db(0x50); db(0xd0);
db(0xff); db(0xff); db(0x61); db(0x00); db(0x0a); db(0x7c); db(0x50); db(0xd0);
db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); db(0x70); db(0x00);
db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x06); db(0x30); db(0x3c);
db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); db(0x09); db(0x88);
db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); db(0x0a); db(0x52);
db(0x4e); db(0x90); db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x42);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x3c); db(0x00); db(0x00);
db(0x00); db(0x88); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00);
db(0x00); db(0x40); db(0x2a); db(0x40); db(0x2b); db(0x4e); db(0x00); db(0x14);
db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0e); db(0x61); db(0x00);
db(0x09); db(0x56); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa);
db(0x09); db(0xdb); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6);
db(0x0a); db(0x20); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa);
db(0x0a); db(0xb9); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6);
db(0x22); db(0x3c); db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00);
db(0xea); db(0xd2); db(0x70); db(0x00); db(0x4c); db(0xdf); db(0x60); db(0x00);
db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0a);
db(0x61); db(0x00); db(0x09); db(0x2c); db(0x4e); db(0x90); db(0x4e); db(0x75);
db(0x61); db(0x00); db(0x09); db(0xf6); db(0x4e); db(0x90); db(0x4e); db(0x75);
db(0x61); db(0xf0); db(0x20); db(0x0d); db(0x67); db(0x1c); db(0x2c); db(0x6d);
db(0x00); db(0x14); db(0x20); db(0x2d); db(0x00); db(0x18); db(0x67); db(0x06);
db(0x22); db(0x40); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4d);
db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x4e); db(0xae);
db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7);
db(0x38); db(0x3e); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa);
db(0x09); db(0x69); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
db(0x0a); db(0x47); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00);
db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00);
db(0x67); db(0x4c); db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92);
db(0x34); db(0xaa); db(0x00); db(0x02); db(0x24); db(0x0a); db(0x54); db(0x82);
@ -764,31 +764,31 @@
db(0x76); db(0x20); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6);
db(0xb6); db(0x80); db(0x66); db(0x12); db(0x4a); db(0x6a); db(0x00); db(0x10);
db(0x66); db(0xc4); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x10);
db(0x61); db(0x00); db(0x08); db(0x9c); db(0x4e); db(0x90); db(0x22); db(0x04);
db(0x61); db(0x00); db(0x09); db(0x66); db(0x4e); db(0x90); db(0x22); db(0x04);
db(0x67); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x4c); db(0xdf);
db(0x7c); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x6d); db(0x00); db(0x18);
db(0x41); db(0xfa); db(0x08); db(0xdc); db(0x22); db(0x08); db(0x74); db(0xfe);
db(0x41); db(0xfa); db(0x09); db(0xba); db(0x22); db(0x08); db(0x74); db(0xfe);
db(0x4e); db(0xae); db(0xff); db(0xac); db(0x22); db(0x00); db(0x67); db(0x34);
db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14);
db(0x45); db(0xed); db(0x00); db(0x38); db(0x70); db(0xff); db(0x4e); db(0xae);
db(0xfe); db(0xb6); db(0x15); db(0x40); db(0x00); db(0x14); db(0x41); db(0xfa);
db(0x08); db(0xd1); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00);
db(0x09); db(0xaf); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00);
db(0x00); db(0x12); db(0x00); db(0x0c); db(0x25); db(0x6d); db(0x00); db(0x08);
db(0x00); db(0x10); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x22); db(0x0a);
db(0x4e); db(0xae); db(0xfc); db(0x88); db(0x2c); db(0x6d); db(0x00); db(0x14);
db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10);
db(0x00); db(0x00); db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38);
db(0x72); db(0x0d); db(0x61); db(0x00); db(0x08); db(0x2a); db(0x4e); db(0x90);
db(0x72); db(0x0d); db(0x61); db(0x00); db(0x08); db(0xf4); db(0x4e); db(0x90);
db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xfc); db(0x2a); db(0x40);
db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae);
db(0xfe); db(0xda); db(0x2b); db(0x40); db(0x00); db(0x08); db(0x43); db(0xfa);
db(0x09); db(0x2f); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
db(0x0a); db(0x0d); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8);
db(0x2b); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xfe); db(0xda);
db(0x2c); db(0x40); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a);
db(0x41); db(0xfa); db(0x08); db(0x30); db(0x22); db(0x08); db(0x74); db(0xfe);
db(0x41); db(0xfa); db(0x09); db(0x0e); db(0x22); db(0x08); db(0x74); db(0xfe);
db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0xea);
db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x72); db(0x32);
db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x08); db(0x1a);
db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x08); db(0xf8);
db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac);
db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xa4); db(0x22); db(0x00);
db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14);
@ -797,7 +797,7 @@
db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0x84); db(0x70); db(0x00);
db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2);
db(0x72); db(0x00); db(0x20); db(0x2d); db(0x00); db(0x0c); db(0x41); db(0xfa);
db(0x07); db(0xf8); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44);
db(0x08); db(0xd6); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44);
db(0x4a); db(0x80); db(0x66); db(0xe2); db(0x20); db(0x6c); db(0x00); db(0x14);
db(0x0c); db(0x68); db(0x00); db(0x25); db(0x00); db(0x14); db(0x64); db(0x0c);
db(0x61); db(0x00); db(0xfe); db(0x48); db(0x70); db(0x00); db(0x4e); db(0xae);
@ -807,7 +807,7 @@
db(0x00); db(0x0c); db(0x00); db(0x1c); db(0x2b); db(0x4d); db(0x00); db(0x2c);
db(0x41); db(0xfa); db(0x01); db(0x60); db(0x2b); db(0x48); db(0x00); db(0x24);
db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c);
db(0xff); db(0x38); db(0x72); db(0x0f); db(0x61); db(0x00); db(0x07); db(0x40);
db(0xff); db(0x38); db(0x72); db(0x0f); db(0x61); db(0x00); db(0x08); db(0x0a);
db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x00); db(0x66); db(0x1c);
db(0x70); db(0x00); db(0x74); db(0x00); db(0x14); db(0x2d); db(0x00); db(0x4c);
db(0x05); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae);
@ -815,7 +815,7 @@
db(0xfe); db(0x1e); db(0x60); db(0xe4); db(0x20); db(0x2d); db(0x00); db(0x00);
db(0x67); db(0x00); db(0x00); db(0x76); db(0x72); db(0x01); db(0x4e); db(0xae);
db(0xff); db(0x3a); db(0x2b); db(0x40); db(0x00); db(0x04); db(0x30); db(0x3c);
db(0xff); db(0x38); db(0x72); db(0x0c); db(0x61); db(0x00); db(0x07); db(0x00);
db(0xff); db(0x38); db(0x72); db(0x0c); db(0x61); db(0x00); db(0x07); db(0xca);
db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x40); db(0x4a); db(0xad);
db(0x00); db(0x04); db(0x67); db(0x3a); db(0x39); db(0x7c); db(0x00); db(0x03);
db(0x00); db(0x1c); db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac);
@ -843,7 +843,7 @@
db(0x00); db(0x28); db(0x20); db(0x02); db(0x51); db(0x80); db(0x29); db(0x40);
db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38);
db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0b); db(0x61); db(0x00);
db(0x06); db(0x26); db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90);
db(0x06); db(0xf0); db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90);
db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e);
db(0x4a); db(0xac); db(0x00); db(0x20); db(0x67); db(0x00); db(0xfe); db(0xda);
db(0x41); db(0xed); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28);
@ -856,26 +856,26 @@
db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xbc);
db(0x2c); db(0x5f); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x2c); db(0x78);
db(0x00); db(0x04); db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x38);
db(0x72); db(0x11); db(0x61); db(0x00); db(0x05); db(0xba); db(0x4e); db(0x90);
db(0x72); db(0x11); db(0x61); db(0x00); db(0x06); db(0x84); db(0x4e); db(0x90);
db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x38); db(0x74); db(0x00);
db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e);
db(0x43); db(0xfa); db(0x05); db(0xcc); db(0x4e); db(0xae); db(0xfe); db(0xec);
db(0x43); db(0xfa); db(0x06); db(0xaa); db(0x4e); db(0xae); db(0xfe); db(0xec);
db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x43); db(0xfa);
db(0x00); db(0x22); db(0x24); db(0x68); db(0xff); db(0xe4); db(0x21); db(0x49);
db(0xff); db(0xe4); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x38);
db(0x72); db(0x65); db(0x61); db(0x00); db(0x05); db(0x82); db(0x4e); db(0x90);
db(0x72); db(0x65); db(0x61); db(0x00); db(0x06); db(0x4c); db(0x4e); db(0x90);
db(0x74); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x20); db(0x02);
db(0x4e); db(0x75); db(0x59); db(0x8f); db(0x48); db(0xe7); db(0xc0); db(0x80);
db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x66); db(0x61); db(0x00);
db(0x05); db(0x66); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03);
db(0x06); db(0x30); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03);
db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xfa);
db(0x06); db(0x6a); db(0x43); db(0xfa); db(0x00); db(0x14); db(0x70); db(0x0f);
db(0x07); db(0x48); db(0x43); db(0xfa); db(0x00); db(0x14); db(0x70); db(0x0f);
db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00);
db(0xe6); db(0xda); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x10);
db(0x00); db(0x00); db(0x00); db(0x00); db(0x2c); db(0x78); db(0x00); db(0x04);
db(0x70); db(0x00); db(0x43); db(0xfa); db(0x06); db(0x53); db(0x4e); db(0xae);
db(0x70); db(0x00); db(0x43); db(0xfa); db(0x07); db(0x31); db(0x4e); db(0xae);
db(0xfd); db(0xd8); db(0x72); db(0x02); db(0x30); db(0x3c); db(0xff); db(0x78);
db(0x61); db(0x00); db(0x05); db(0x24); db(0x24); db(0x48); db(0x72); db(0x01);
db(0x61); db(0x00); db(0x05); db(0xee); db(0x24); db(0x48); db(0x72); db(0x01);
db(0x4e); db(0x90); db(0x4a); db(0x81); db(0x67); db(0x0c); db(0x26); db(0x41);
db(0x4e); db(0xae); db(0xfe); db(0x08); db(0x72); db(0x02); db(0x20); db(0x4b);
db(0x4e); db(0x92); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04);
@ -906,7 +906,7 @@
db(0xbc); db(0xfc); db(0x00); db(0x00); db(0x67); db(0x06); db(0x4e); db(0xae);
db(0xff); db(0x6a); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x3e);
db(0x24); db(0x48); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa);
db(0x05); db(0x4f); db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x2a); db(0x40);
db(0x06); db(0x2d); db(0x4e); db(0xae); db(0xfe); db(0x68); db(0x2a); db(0x40);
db(0x20); db(0x6d); db(0x00); db(0x22); db(0x20); db(0x28); db(0x00); db(0x18);
db(0xe5); db(0x88); db(0x26); db(0x40); db(0x24); db(0xab); db(0x00); db(0x04);
db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x04);
@ -918,7 +918,7 @@
db(0x20); db(0x40); db(0x41); db(0xe8); db(0x00); db(0x5c); db(0xe5); db(0x8a);
db(0x22); db(0x42); db(0x22); db(0x51); db(0x4e); db(0xae); db(0xfe); db(0x92);
db(0x22); db(0x02); db(0x43); db(0xfa); db(0x00); db(0x0e); db(0x30); db(0x3c);
db(0xff); db(0x68); db(0x61); db(0x00); db(0x03); db(0xca); db(0x4e); db(0x90);
db(0xff); db(0x68); db(0x61); db(0x00); db(0x04); db(0x94); db(0x4e); db(0x90);
db(0x4e); db(0xd0); db(0x70); db(0x30); db(0x60); db(0x0a); db(0x70); db(0x28);
db(0x60); db(0x06); db(0x20); db(0x06); db(0x60); db(0x02); db(0x20); db(0x06);
db(0x12); db(0xd8); db(0x53); db(0x80); db(0x6e); db(0xfa); db(0x4e); db(0x75);
@ -926,18 +926,18 @@
db(0x00); db(0x00); db(0x00); db(0x04); db(0x00); db(0x00); db(0x00); db(0x02);
db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04);
db(0x20); db(0x3c); db(0x00); db(0x00); db(0xff); db(0xfc); db(0x61); db(0x00);
db(0x03); db(0x8e); db(0x24); db(0x48); db(0x20); db(0x08); db(0x42); db(0x40);
db(0x04); db(0x68); db(0x24); db(0x48); db(0x20); db(0x08); db(0x42); db(0x40);
db(0x20); db(0x40); db(0x21); db(0x4e); db(0x3f); db(0xfc); db(0x70); db(0x1a);
db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae);
db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa); db(0x05); db(0x14);
db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa); db(0x05); db(0xf2);
db(0x23); db(0x48); db(0x00); db(0x0a); db(0x23); db(0x4a); db(0x00); db(0x0e);
db(0x41); db(0xfa); db(0x01); db(0x30); db(0x23); db(0x48); db(0x00); db(0x12);
db(0x33); db(0x7c); db(0x02); db(0x7a); db(0x00); db(0x08); db(0x70); db(0x0d);
db(0x4e); db(0xae); db(0xff); db(0x58); db(0x4c); db(0xdf); db(0x44); db(0x00);
db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x20); db(0x3c);
db(0x00); db(0x00); db(0xf0); db(0x00); db(0x61); db(0x00); db(0x03); db(0x40);
db(0x00); db(0x00); db(0xf0); db(0x00); db(0x61); db(0x00); db(0x04); db(0x1a);
db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x40); db(0x00);
db(0x61); db(0x00); db(0x03); db(0x34); db(0x70); db(0x03); db(0x4a); db(0x69);
db(0x61); db(0x00); db(0x04); db(0x0e); db(0x70); db(0x03); db(0x4a); db(0x69);
db(0x00); db(0x02); db(0x67); db(0x0e); db(0xd0); db(0xfc); db(0x20); db(0x00);
db(0xd2); db(0xfc); db(0x00); db(0x08); db(0x51); db(0xc8); db(0xff); db(0xf0);
db(0x60); db(0xd4); db(0x48); db(0xe8); db(0x00); db(0xfc); db(0x00); db(0x0c);
@ -999,7 +999,7 @@
db(0x0c); db(0x44); db(0x00); db(0x24); db(0x67); db(0x28); db(0x32); db(0x3c);
db(0x00); db(0xb6); db(0x0c); db(0x44); db(0x00); db(0x26); db(0x67); db(0x1e);
db(0x20); db(0x3c); db(0x00); db(0x00); db(0xff); db(0xf4); db(0x61); db(0x00);
db(0x01); db(0x46); db(0x20); db(0x10); db(0x67); db(0x10); db(0x22); db(0x40);
db(0x02); db(0x20); db(0x20); db(0x10); db(0x67); db(0x10); db(0x22); db(0x40);
db(0x20); db(0x3c); db(0x00); db(0x00); db(0x01); db(0x00); db(0x4e); db(0xae);
db(0xfe); db(0xbc); db(0x70); db(0x01); db(0x60); db(0x10); db(0xd6); db(0xc1);
db(0x4c); db(0xd4); db(0x07); db(0x00); db(0x4c); db(0xd4); db(0x00); db(0x07);
@ -1039,59 +1039,87 @@
db(0x00); db(0x0f); db(0xe0); db(0x4b); db(0xc6); db(0xfc); db(0x00); db(0x14);
db(0xe5); db(0x4e); db(0xd6); db(0x46); db(0x2b); db(0x80); db(0x30); db(0x04);
db(0xd8); db(0xfc); db(0x00); db(0x10); db(0x53); db(0x87); db(0x66); db(0xc2);
db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x41); db(0xfa);
db(0xdf); db(0x6c); db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff);
db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75);
db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65);
db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64);
db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x63); db(0x6f);
db(0x6e); db(0x73); db(0x6f); db(0x6c); db(0x65); db(0x2e); db(0x64); db(0x65);
db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56);
db(0x53); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00);
db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69);
db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64);
db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41);
db(0x4d); db(0x3a); db(0x00); db(0x4e); db(0x49); db(0x4c); db(0x3a); db(0x00);
db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72);
db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65);
db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x45); db(0x6e); db(0x76);
db(0x2f); db(0x53); db(0x79); db(0x73); db(0x2f); db(0x50); db(0x6f); db(0x69);
db(0x6e); db(0x74); db(0x65); db(0x72); db(0x2e); db(0x70); db(0x72); db(0x65);
db(0x66); db(0x73); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x63);
db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64);
db(0x20); db(0x73); db(0x68); db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67);
db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75);
db(0x73); db(0x65); db(0x20); db(0x64); db(0x72); db(0x69); db(0x76); db(0x65);
db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x68); db(0x65);
db(0x61); db(0x72); db(0x74); db(0x20); db(0x62); db(0x65); db(0x61); db(0x74);
db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x00);
db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61);
db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74);
db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66);
db(0x73); db(0x20); db(0x77); db(0x6f); db(0x72); db(0x6b); db(0x65); db(0x72);
db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x74); db(0x72); db(0x61);
db(0x70); db(0x20); db(0x77); db(0x6f); db(0x72); db(0x6b); db(0x65); db(0x72);
db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x2a); db(0x48);
db(0x7e); db(0x14); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae);
db(0xff); db(0x7c); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x61); db(0x00);
db(0x00); db(0xc8); db(0x24); db(0x0d); db(0x72); db(0x13); db(0x4e); db(0x90);
db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x98); db(0x26); db(0x40);
db(0x28); db(0x5b); db(0x20); db(0x4c); db(0x22); db(0x4d); db(0x30); db(0x3c);
db(0x3f); db(0xff); db(0x22); db(0xd8); db(0x51); db(0xc8); db(0xff); db(0xfc);
db(0x22); db(0x0d); db(0x92); db(0x8c); db(0x20); db(0x4b); db(0x70); db(0x00);
db(0x30); db(0x18); db(0x67); db(0x0e); db(0x43); db(0xf4); db(0x08); db(0x00);
db(0xd3); db(0x91); db(0x43); db(0xf5); db(0x08); db(0x00); db(0xd3); db(0x91);
db(0x60); db(0xec); db(0x70); db(0x00); db(0x20); db(0x18); db(0x67); db(0x06);
db(0x22); db(0x40); db(0xd3); db(0x91); db(0x60); db(0xf4); db(0x70); db(0x00);
db(0x61); db(0x00); db(0x00); db(0x7e); db(0x43); db(0xfa); db(0x00); db(0x7a);
db(0x93); db(0xc8); db(0xd3); db(0xcd); db(0x32); db(0xfc); db(0x41); db(0xf9);
db(0x22); db(0xcc); db(0x32); db(0xfc); db(0x02); db(0x80); db(0x22); db(0xfc);
db(0x00); db(0x00); db(0xff); db(0xff); db(0x22); db(0xbc); db(0xd1); db(0xc0);
db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x00); db(0x40); db(0x70); db(0x00);
db(0x30); db(0x18); db(0x67); db(0x14); db(0x06); db(0x40); db(0x00); db(0x0c);
db(0x43); db(0xf4); db(0x08); db(0x00); db(0x32); db(0xfc); db(0x4e); db(0xf9);
db(0x45); db(0xf5); db(0x08); db(0x00); db(0x22); db(0x8a); db(0x60); db(0xe6);
db(0x0c); db(0x6e); db(0x00); db(0x24); db(0x00); db(0x14); db(0x65); db(0x04);
db(0x4e); db(0xae); db(0xfd); db(0x84); db(0x30); db(0x3c); db(0xff); db(0x38);
db(0x61); db(0x00); db(0x00); db(0x2e); db(0x24); db(0x0d); db(0x72); db(0x14);
db(0x4e); db(0x90); db(0x7e); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76);
db(0x20); db(0x07); db(0x4e); db(0x75); db(0x0e); db(0x90); db(0x13); db(0x82);
db(0x05); db(0x58); db(0x02); db(0xa0); db(0x03); db(0x26); db(0x00); db(0x00);
db(0x41); db(0xfa); db(0xde); db(0xa2); db(0x02); db(0x80); db(0x00); db(0x00);
db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x00); db(0x00);
db(0x41); db(0xfa); db(0xde); db(0x92); db(0x02); db(0x80); db(0x00); db(0x00);
db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x4e); db(0x71);
db(0x4e); db(0x71); db(0x69); db(0x6e); db(0x70); db(0x75); db(0x74); db(0x2e);
db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x74);
db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64); db(0x65); db(0x76);
db(0x69); db(0x63); db(0x65); db(0x00); db(0x63); db(0x6f); db(0x6e); db(0x73);
db(0x6f); db(0x6c); db(0x65); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69);
db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x00);
db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00); db(0x44); db(0x45);
db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62);
db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76);
db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a);
db(0x00); db(0x4e); db(0x49); db(0x4c); db(0x3a); db(0x00); db(0x63); db(0x6c);
db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e);
db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52);
db(0x41); db(0x4d); db(0x3a); db(0x45); db(0x6e); db(0x76); db(0x2f); db(0x53);
db(0x79); db(0x73); db(0x2f); db(0x50); db(0x6f); db(0x69); db(0x6e); db(0x74);
db(0x65); db(0x72); db(0x2e); db(0x70); db(0x72); db(0x65); db(0x66); db(0x73);
db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x63); db(0x6c); db(0x69);
db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x20); db(0x73);
db(0x68); db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67); db(0x00); db(0x55);
db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65);
db(0x20); db(0x64); db(0x72); db(0x69); db(0x76); db(0x65); db(0x72); db(0x00);
db(0x55); db(0x41); db(0x45); db(0x20); db(0x68); db(0x65); db(0x61); db(0x72);
db(0x74); db(0x20); db(0x62); db(0x65); db(0x61); db(0x74); db(0x00); db(0x55);
db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x00); db(0x55); db(0x41);
db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74);
db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72);
db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20);
db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e);
db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73);
db(0x73); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x64); db(0x65);
db(0x62); db(0x75); db(0x67); db(0x67); db(0x65); db(0x72); db(0x00); db(0x64);
db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61);
db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69);
db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62);
db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x67); db(0x72); db(0x61);
db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69);
db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78);
db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e);
db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00);
db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74);
db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75);
db(0x72); db(0x63); db(0x65); db(0x00); db(0x6d); db(0x65); db(0x67); db(0x61);
db(0x63); db(0x68); db(0x69); db(0x70); db(0x20); db(0x6d); db(0x65); db(0x6d);
db(0x6f); db(0x72); db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65);
db(0x20); db(0x53); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00);
db(0x55); db(0x41); db(0x45); db(0x20); db(0x73); db(0x68); db(0x65); db(0x6c);
db(0x6c); db(0x20); db(0x65); db(0x78); db(0x65); db(0x63); db(0x75); db(0x74);
db(0x65); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x62); db(0x6f);
db(0x61); db(0x72); db(0x64); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2);
db(0x77); db(0x6f); db(0x72); db(0x6b); db(0x65); db(0x72); db(0x00); db(0x55);
db(0x41); db(0x45); db(0x20); db(0x74); db(0x72); db(0x61); db(0x70); db(0x20);
db(0x77); db(0x6f); db(0x72); db(0x6b); db(0x65); db(0x72); db(0x00); db(0x55);
db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75);
db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20);
db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); db(0x73); db(0x00);
db(0x55); db(0x41); db(0x45); db(0x20); db(0x64); db(0x65); db(0x62); db(0x75);
db(0x67); db(0x67); db(0x65); db(0x72); db(0x00); db(0x64); db(0x6f); db(0x73);
db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79);
db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69); db(0x74); db(0x69);
db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61);
db(0x72); db(0x79); db(0x00); db(0x67); db(0x72); db(0x61); db(0x70); db(0x68);
db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72);
db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); db(0x70); db(0x61);
db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69);
db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x46); db(0x69);
db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d);
db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); db(0x72); db(0x63);
db(0x65); db(0x00); db(0x6d); db(0x65); db(0x67); db(0x61); db(0x63); db(0x68);
db(0x69); db(0x70); db(0x20); db(0x6d); db(0x65); db(0x6d); db(0x6f); db(0x72);
db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x20); db(0x53);
db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41);
db(0x45); db(0x20); db(0x73); db(0x68); db(0x65); db(0x6c); db(0x6c); db(0x20);
db(0x65); db(0x78); db(0x65); db(0x63); db(0x75); db(0x74); db(0x65); db(0x00);
db(0x55); db(0x41); db(0x45); db(0x20); db(0x62); db(0x6f); db(0x61); db(0x72);
db(0x64); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2);

View File

@ -6,7 +6,7 @@
* (c) 2006 - 2015 Toni Wilen
*/
#define IDE_LOG 2
#define IDE_LOG 1
#include "sysconfig.h"
#include "sysdeps.h"

View File

@ -70,6 +70,9 @@ extern void calltrap (uae_u32);
extern void org (uae_u32);
extern uae_u32 here (void);
extern uaecptr makedatatable (uaecptr resid, uaecptr resname, uae_u8 type, uae_s8 priority, uae_u16 ver, uae_u16 rev);
extern uae_u32 boot_rom_copy(TrapContext*, uaecptr, int);
extern void add_rom_absolute(uaecptr addr);
extern void save_rom_absolute(uaecptr addr);
extern void align (int);

View File

@ -135,7 +135,10 @@
#define KBLED_CAPSLOCKM (1 << KBLED_CAPSLOCKB)
#define KBLED_SCROLLLOCKM (1 << KBLED_SCROLLLOCKB)
enum aks { AKS_ENTERGUI = 0x200, AKS_SCREENSHOT_FILE, AKS_SCREENSHOT_CLIPBOARD, AKS_FREEZEBUTTON,
enum aks { AKS_ENTERGUI = 0x200,
AKS_SCREENSHOT_FILE,
AKS_SCREENSHOT_CLIPBOARD,
AKS_FREEZEBUTTON,
AKS_FLOPPY0, AKS_FLOPPY1, AKS_FLOPPY2, AKS_FLOPPY3,
AKS_EFLOPPY0, AKS_EFLOPPY1, AKS_EFLOPPY2, AKS_EFLOPPY3,
AKS_TOGGLEDEFAULTSCREEN,

View File

@ -42,6 +42,7 @@ void uae_ppc_free(void);
void uae_ppc_hsync_handler(void);
void uae_ppc_wakeup(void);
void ppc_map_banks(uae_u32, uae_u32, const TCHAR*, void*, bool);
void ppc_remap_bank(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr);
bool uae_self_is_ppc(void);
void uae_ppc_wakeup_main(void);

View File

@ -160,14 +160,21 @@ void fixup_prefs_dimensions (struct uae_prefs *prefs)
{
fixup_prefs_dim2 (&prefs->gfx_size_fs);
fixup_prefs_dim2 (&prefs->gfx_size_win);
if (prefs->gfx_apmode[1].gfx_vsync)
if (prefs->gfx_apmode[1].gfx_vsync > 0)
prefs->gfx_apmode[1].gfx_vsyncmode = 1;
for (int i = 0; i < 2; i++) {
struct apmode *ap = &prefs->gfx_apmode[i];
ap->gfx_vflip = 0;
ap->gfx_strobo = false;
if (ap->gfx_vsync) {
if (ap->gfx_vsync < 0) {
// adaptive sync
ap->gfx_vsyncmode = 0;
ap->gfx_vflip = 0;
if (ap->gfx_backbuffers >= 2)
ap->gfx_backbuffers = 1;
ap->gfx_strobo = prefs->lightboost_strobo;
} else if (ap->gfx_vsync > 0) {
if (ap->gfx_vsyncmode) {
// low latency vsync: no flip only if no-buffer
if (ap->gfx_backbuffers >= 1)
@ -569,7 +576,7 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig)
}
for (int i = 0; i < MAX_RTG_BOARDS; i++) {
if ((p->rtgboards[i].rtgmem_size > 0 && p->rtgboards[i].rtgmem_type == GFXBOARD_UAE_Z3) && p->address_space_24) {
error_log (_T("UAEGFX RTG can't be used if address space is 24-bit."));
error_log (_T("UAEGFX Z3 RTG can't be used if address space is 24-bit."));
p->rtgboards[i].rtgmem_size = 0;
err = 1;
}
@ -582,6 +589,10 @@ void fixup_prefs (struct uae_prefs *p, bool userconfig)
err = 1;
}
#endif
if (p->socket_emu && p->uaeboard >= 3) {
write_log(_T("bsdsocket.library is not compatible with indirect UAE Boot ROM.\n"));
p->socket_emu = 0;
}
if (p->nr_floppies < 0 || p->nr_floppies > 4) {
error_log (_T("Invalid number of floppies. Using 2."));

View File

@ -4588,7 +4588,8 @@ static uae_u32 REGPARAM2 picasso_SetMemoryMode(TrapContext *ctx)
#define PUTABI(func) \
if (ABI) \
trap_put_long(ctx, ABI + func, here ());
trap_put_long(ctx, ABI + func, here ()); \
save_rom_absolute(ABI + func);
#define RTGCALL(func,funcdef,call) \
PUTABI (func); \
@ -4620,11 +4621,12 @@ static uae_u32 REGPARAM2 picasso_SetMemoryMode(TrapContext *ctx)
#define RTGNONE(func) \
if (ABI) \
trap_put_long(ctx, ABI + func, start);
trap_put_long(ctx, ABI + func, start); \
save_rom_absolute(ABI + func);
static void inituaegfxfuncs(TrapContext *ctx, uaecptr start, uaecptr ABI)
{
if (uaegfx_old)
if (uaegfx_old || !ABI)
return;
org (start);

View File

@ -399,6 +399,7 @@
#define IDS_NUMSG_NO_PPC 404
#define IDS_NUMSG_UAEBOOTROM_PCC 405
#define IDS_AUTOSCALE_OVERSCAN_BLANK 408
#define IDS_SCREEN_ADAPTIVE_SYNC 409
#define IDS_QS_MODELS 1000
#define IDS_QS_MODEL_A500 1001
#define IDS_QS_MODEL_A500P 1002

View File

@ -2036,6 +2036,7 @@ BEGIN
IDS_NUMSG_UAEBOOTROM_PCC
"PPC native OS booted with incompatible UAE boot ROM enabled.\nSelect ROM panel ""New UAE (128k, ROM, Indirect)"" option\nor disable all UAE expansions.\n"
IDS_AUTOSCALE_OVERSCAN_BLANK "Overscan blanking"
IDS_SCREEN_ADAPTIVE_SYNC "Adaptive Sync"
END
#endif // English resources

View File

@ -20,12 +20,12 @@
#define LANG_DLL_FULL_VERSION_MATCH 1
#if WINUAEPUBLICBETA
#define WINUAEBETA _T("9")
#define WINUAEBETA _T("10")
#else
#define WINUAEBETA _T("")
#endif
#define WINUAEDATE MAKEBD(2016, 3, 19)
#define WINUAEDATE MAKEBD(2016, 4, 9)
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")

View File

@ -561,9 +561,9 @@ void getfilterrect2 (RECT *sr, RECT *dr, RECT *zr, int dst_width, int dst_height
OffsetRect (zr, 0, (int)(-filter_vert_offset * ahs));
diff = dr->right - dr->left;
filterxmult = diff / (dst_width * scale);
filterxmult = diff / ((float)dst_width * scale);
diff = dr->bottom - dr->top;
filterymult = diff / (dst_height * scale);
filterymult = diff / ((float)dst_height * scale);
goto end;
}

View File

@ -1106,7 +1106,7 @@ bool render_screen (bool immediate)
}
flushymin = 0;
flushymax = currentmode->amiga_height;
EnterCriticalSection (&screen_cs);
gfx_lock();
if (currentmode->flags & DM_D3D) {
v = D3D_renderframe (immediate);
} else if (currentmode->flags & DM_SWSCALE) {
@ -1116,7 +1116,7 @@ bool render_screen (bool immediate)
v = true;
}
render_ok = v;
LeaveCriticalSection (&screen_cs);
gfx_unlock();
return render_ok;
}
@ -1139,7 +1139,7 @@ static void doflipevent (int mode)
bool show_screen_maybe (bool show)
{
struct apmode *ap = picasso_on ? &currprefs.gfx_apmode[1] : &currprefs.gfx_apmode[0];
if (!ap->gfx_vflip || ap->gfx_vsyncmode == 0 || !ap->gfx_vsync) {
if (!ap->gfx_vflip || ap->gfx_vsyncmode == 0 || ap->gfx_vsync <= 0) {
if (show)
show_screen (0);
return false;
@ -1155,30 +1155,59 @@ bool show_screen_maybe (bool show)
void show_screen_special (void)
{
EnterCriticalSection (&screen_cs);
if (currentmode->flags & DM_D3D) {
gfx_lock();
D3D_showframe_special (1);
gfx_unlock();
}
LeaveCriticalSection (&screen_cs);
}
static frame_time_t strobo_time;
static void CALLBACK blackinsertion_cb(
UINT uTimerID,
UINT uMsg,
DWORD_PTR dwUser,
DWORD_PTR dw1,
DWORD_PTR dw2
)
{
if (!screen_is_initialized)
return;
for (;;) {
frame_time_t ct = read_processor_time();
if ((int)strobo_time - (int)ct <= 0 || (int)strobo_time - (int)ct > vsynctimebase / 2) {
break;
}
}
if (!screen_is_initialized)
return;
show_screen_special();
}
void show_screen (int mode)
{
EnterCriticalSection (&screen_cs);
gfx_lock();
if (mode == 2) {
if (currentmode->flags & DM_D3D) {
D3D_showframe_special (1);
}
LeaveCriticalSection (&screen_cs);
gfx_unlock();
return;
}
if (!render_ok) {
LeaveCriticalSection (&screen_cs);
gfx_unlock();
return;
}
if (currentmode->flags & DM_D3D) {
D3D_showframe ();
struct apmode *ap = picasso_on ? &currprefs.gfx_apmode[1] : &currprefs.gfx_apmode[0];
if (isfullscreen() > 0 && isvsync() == 0 && ap->gfx_strobo && ap->gfx_refreshrate > 80) {
//if (isvsync() == 0 && ap->gfx_strobo) {
int ms = (int)((1000 / 2) / vblank_hz) - 1;
strobo_time = read_processor_time() + vsynctimebase / 2;
timeSetEvent(ms, 0, blackinsertion_cb, NULL, TIME_ONESHOT | TIME_CALLBACK_FUNCTION);
}
D3D_showframe();
#ifdef GFXFILTER
} else if (currentmode->flags & DM_SWSCALE) {
if (!dx_islost () && !picasso_on)
@ -1188,7 +1217,7 @@ void show_screen (int mode)
if (!dx_islost () && !picasso_on)
DirectDraw_Flip (1);
}
LeaveCriticalSection (&screen_cs);
gfx_unlock();
render_ok = false;
}
@ -1440,10 +1469,10 @@ uae_u8 *gfx_lock_picasso (bool fullupdate, bool doclear)
if (rtg_locked) {
return p;
}
EnterCriticalSection (&screen_cs);
gfx_lock();
p = gfx_lock_picasso2 (fullupdate);
if (!p) {
LeaveCriticalSection (&screen_cs);
gfx_unlock();
} else {
rtg_locked = true;
if (doclear) {
@ -1460,7 +1489,7 @@ uae_u8 *gfx_lock_picasso (bool fullupdate, bool doclear)
void gfx_unlock_picasso (bool dorender)
{
if (!rtg_locked)
EnterCriticalSection (&screen_cs);
gfx_lock();
rtg_locked = false;
if (currprefs.gfx_api) {
if (dorender) {
@ -1472,14 +1501,14 @@ void gfx_unlock_picasso (bool dorender)
D3D_unlocktexture ();
if (dorender) {
if (D3D_renderframe (false)) {
LeaveCriticalSection (&screen_cs);
gfx_unlock();
render_ok = true;
show_screen_maybe (true);
} else {
LeaveCriticalSection (&screen_cs);
gfx_unlock();
}
} else {
LeaveCriticalSection (&screen_cs);
gfx_unlock();
}
} else {
DirectDraw_SurfaceUnlock ();
@ -1491,7 +1520,7 @@ void gfx_unlock_picasso (bool dorender)
p96_double_buffer_needs_flushing = 0;
}
}
LeaveCriticalSection (&screen_cs);
gfx_unlock();
}
}
@ -1730,6 +1759,7 @@ static int open_windows (bool mousecapture)
changevblankthreadmode (VBLANKTH_IDLE);
screen_is_initialized = 0;
inputdevice_unacquire ();
wait_keyrelease ();
reset_sound ();
@ -1737,7 +1767,9 @@ static int open_windows (bool mousecapture)
updatewinfsmode (&currprefs);
#ifdef D3D
gfx_lock();
D3D_free (false);
gfx_unlock();
#endif
#ifdef OPENGL
OGL_free ();

View File

@ -6824,13 +6824,20 @@ static void values_to_displaydlg (HWND hDlg)
SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_ADDSTRING, 0, (LPARAM)buffer);
WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC, buffer, sizeof buffer / sizeof (TCHAR));
SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_ADDSTRING, 0, (LPARAM)buffer);
WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC_AUTOSWITCH, buffer, sizeof buffer / sizeof (TCHAR));
WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC_AUTOSWITCH, buffer, sizeof buffer / sizeof(TCHAR));
SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_ADDSTRING, 0, (LPARAM)buffer);
WIN32GUI_LoadUIString(IDS_SCREEN_ADAPTIVE_SYNC, buffer, sizeof buffer / sizeof(TCHAR));
SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_ADDSTRING, 0, (LPARAM)buffer);
SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE, CB_SETCURSEL,
workprefs.gfx_apmode[0].gfx_fullscreen, 0);
SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_SETCURSEL,
workprefs.gfx_apmode[0].gfx_vsync + (workprefs.gfx_apmode[0].gfx_vsyncmode || !workprefs.gfx_apmode[0].gfx_vsync ? 0 : 2), 0);
v = workprefs.gfx_apmode[0].gfx_vsync;
if (v < 0)
v = 5;
else if (v > 0) {
v = v + (workprefs.gfx_apmode[0].gfx_vsyncmode || !v ? 0 : 2);
}
SendDlgItemMessage(hDlg, IDC_SCREENMODE_NATIVE2, CB_SETCURSEL, v, 0);
SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG, CB_RESETCONTENT, 0, 0);
SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_RESETCONTENT, 0, 0);
@ -6851,14 +6858,20 @@ static void values_to_displaydlg (HWND hDlg)
#endif
WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC2, buffer, sizeof buffer / sizeof (TCHAR));
SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_ADDSTRING, 0, (LPARAM)buffer);
WIN32GUI_LoadUIString(IDS_SCREEN_ADAPTIVE_SYNC, buffer, sizeof buffer / sizeof(TCHAR));
SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_ADDSTRING, 0, (LPARAM)buffer);
#if 0
WIN32GUI_LoadUIString(IDS_SCREEN_VSYNC2_AUTOSWITCH, buffer, sizeof buffer / sizeof (TCHAR));
SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_ADDSTRING, 0, (LPARAM)buffer);
#endif
SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG, CB_SETCURSEL,
workprefs.gfx_apmode[1].gfx_fullscreen, 0);
SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_SETCURSEL,
workprefs.gfx_apmode[1].gfx_vsync, 0);
v = workprefs.gfx_apmode[1].gfx_vsync;
if (v < 0)
v = 2;
else if (v > 0)
v = 1;
SendDlgItemMessage(hDlg, IDC_SCREENMODE_RTG2, CB_SETCURSEL, v, 0);
SendDlgItemMessage(hDlg, IDC_LORES, CB_RESETCONTENT, 0, 0);
WIN32GUI_LoadUIString(IDS_RES_LORES, buffer, sizeof buffer / sizeof (TCHAR));
@ -7053,20 +7066,33 @@ static void values_from_displaydlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l
int oldvs = workprefs.gfx_apmode[0].gfx_vsync;
workprefs.gfx_apmode[0].gfx_vsync = 0;
workprefs.gfx_apmode[0].gfx_vsyncmode = 0;
if (i > 0) {
i--;
workprefs.gfx_apmode[0].gfx_vsync = (i & 1) + 1;
workprefs.gfx_apmode[0].gfx_vsyncmode = (i < 2) ? 1 : 0;
if (i == 1) {
workprefs.gfx_apmode[0].gfx_vsync = 1;
workprefs.gfx_apmode[0].gfx_vsyncmode = 1;
} else if (i == 2) {
workprefs.gfx_apmode[0].gfx_vsync = 2;
workprefs.gfx_apmode[0].gfx_vsyncmode = 1;
} else if (i == 3) {
workprefs.gfx_apmode[0].gfx_vsync = 1;
workprefs.gfx_apmode[0].gfx_vsyncmode = 0;
} else if (i == 4) {
workprefs.gfx_apmode[0].gfx_vsync = 2;
workprefs.gfx_apmode[0].gfx_vsyncmode = 0;
} else if (i == 5) {
workprefs.gfx_apmode[0].gfx_vsync = -1;
workprefs.gfx_apmode[0].gfx_vsyncmode = 0;
}
workprefs.gfx_apmode[1].gfx_fullscreen = SendDlgItemMessage (hDlg, IDC_SCREENMODE_RTG, CB_GETCURSEL, 0, 0);
i = SendDlgItemMessage (hDlg, IDC_SCREENMODE_RTG2, CB_GETCURSEL, 0, 0);
workprefs.gfx_apmode[1].gfx_vsync = 0;
workprefs.gfx_apmode[1].gfx_vsyncmode = 0;
if (i > 0) {
i--;
workprefs.gfx_apmode[1].gfx_vsync = (i & 1) + 1;
if (i == 1) {
workprefs.gfx_apmode[1].gfx_vsync = 1;
workprefs.gfx_apmode[1].gfx_vsyncmode = 1;
} else if (i == 2) {
workprefs.gfx_apmode[1].gfx_vsync = -1;
workprefs.gfx_apmode[1].gfx_vsyncmode = 0;
}
bool updaterate = false, updateslider = false;

View File

@ -1,4 +1,20 @@
Beta 10:
- if uaenet.device is online and packet(s) have arrived but there is no pending CMD_READ/CMD_READORPHANs:
wait about 2s before dropping it, it is possible that multiple packets will arrive so quickly that Amiga-side
TCP/IP stack don't have time to queue more read commands before packets get dropped.
- uaenet.device stability fix.
- Loading config with unplugged joystick or mouse inserted in either port: previous device was not autoselected.
- Filter panel scaling mode active and mouse driver enabled: mouse got stuck in a corner in some situations.
- Screenshot input event set to toggle-mode in Input panel: key/button press = create screenshots continuously
every frame, following key/button press = stop automatic screenshots.
- one genlinetoscr function (16-bit 4x horizontal stretch) used genlock function in non-genlock mode.
- Adaptive Sync "vsync" mode added. Optimal setting designed for G-Sync/FreeSync monitors. Also allows 100/120Hz
black frame insertion mode. Not very stable yet. (Don't try to use without adaptive sync hardware..)
- 68040 MMU mode SR M-bit handling was missing. 68060 SR M-bit handling was not correct.
- Disable bsdsocket.library if indirect UAE Boot ROM is enabled, it is not (yet?) compatible.
Beta 9:
- Fixed swapped audio channels if stereo separation was set (b1 cleanup missed code path)

View File

@ -463,21 +463,21 @@ void uae_ppc_wakeup_main(void)
}
}
static void ppc_map_region(PPCMemoryRegion *r)
static void ppc_map_region(PPCMemoryRegion *r, bool dolock)
{
if (impl.in_cpu_thread() == false) {
if (dolock && impl.in_cpu_thread() == false) {
/* map_memory will acquire the qemu global lock, so we must ensure
* the PPC CPU can finish any I/O requests and release the lock. */
uae_ppc_spinlock_release();
}
impl.map_memory(r, -1);
if (impl.in_cpu_thread() == false) {
if (dolock && impl.in_cpu_thread() == false) {
uae_ppc_spinlock_get();
}
free((void*)r->name);
}
void ppc_map_banks(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, bool remove)
static void ppc_map_banks2(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, bool remove, bool direct, bool dolock)
{
if (ppc_state == PPC_STATE_INACTIVE || !impl.map_memory)
return;
@ -489,29 +489,49 @@ void ppc_map_banks(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, b
r.alias = remove ? 0xffffffff : 0;
r.memory = addr;
if (r.start == rtarea_base && rtarea_base) {
if (r.start == rtarea_base && rtarea_base && direct) {
// Map first half directly, it contains code only.
// Second half has dynamic data, it must not be direct mapped.
r.memory = rtarea_bank.baseaddr;
r.size = RTAREA_DATAREGION;
ppc_map_region(&r);
ppc_map_region(&r, dolock);
r.start = start + RTAREA_DATAREGION;
r.size = size - RTAREA_DATAREGION;
r.name = ua(name);
r.alias = remove ? 0xffffffff : 0;
r.memory = NULL;
} else if (r.start == uaeboard_base && uaeboard_base) {
} else if (r.start == uaeboard_base && uaeboard_base && direct) {
// Opposite here, first half indirect, second half direct.
r.memory = NULL;
r.size = UAEBOARD_DATAREGION_START;
ppc_map_region(&r);
ppc_map_region(&r, dolock);
r.start = start + UAEBOARD_DATAREGION_START;
r.size = UAEBOARD_DATAREGION_SIZE;
r.name = ua(name);
r.alias = remove ? 0xffffffff : 0;
r.memory = uaeboard_bank.baseaddr + UAEBOARD_DATAREGION_START;
}
ppc_map_region(&r);
ppc_map_region(&r, dolock);
}
void ppc_map_banks(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr, bool remove)
{
ppc_map_banks2(start, size, name, addr, remove, true, true);
}
void ppc_remap_bank(uae_u32 start, uae_u32 size, const TCHAR *name, void *addr)
{
if (ppc_state == PPC_STATE_INACTIVE || !impl.map_memory)
return;
if (impl.in_cpu_thread() == false) {
uae_ppc_spinlock_release();
}
ppc_map_banks2(start, size, name, addr, true, false, false);
ppc_map_banks2(start, size, name, addr, false, true, false);
if (impl.in_cpu_thread() == false) {
uae_ppc_spinlock_get();
}
}
void uae_ppc_get_model(const TCHAR **model, uint32_t *hid1)

416
traps.cpp
View File

@ -306,6 +306,216 @@ static void *trap_thread (void *arg)
return 0;
}
/*
* Set up extended trap context and call handler function
*/
static void trap_HandleExtendedTrap(TrapHandler handler_func, int has_retval)
{
struct TrapContext *context = xcalloc(TrapContext, 1);
if (context) {
uae_sem_init(&context->switch_to_trap_sem, 0, 0);
uae_sem_init(&context->switch_to_emu_sem, 0, 0);
context->trap_handler = handler_func;
context->trap_has_retval = has_retval;
//context->saved_regs = regs;
copytocpucontext(&context->saved_regs);
/* Start thread to handle new trap context. */
uae_start_thread_fast(trap_thread, (void *)context, &context->thread);
/* Switch to trap context to begin execution of
* trap handler function.
*/
uae_sem_post(&context->switch_to_trap_sem);
/* Wait for trap context to switch back to us.
*
* It'll do this when the trap handler is done - or when
* the handler wants to call 68k code. */
uae_sem_wait(&context->switch_to_emu_sem);
}
}
/*
* Call m68k function from an extended trap handler
*
* This function is to be called from the trap context.
*/
static uae_u32 call_hardware_trap_back(TrapContext *ctx, uae_u16 cmd, uae_u32 p1, uae_u32 p2, uae_u32 p3, uae_u32 p4);
static uae_u32 trap_Call68k(TrapContext *ctx, uaecptr func_addr)
{
if (ctx->host_trap_data) {
return call_hardware_trap_back(ctx, 10, func_addr, 0, 0, 0);
} else {
/* Enter critical section - only one trap at a time, please! */
uae_sem_wait(&trap_mutex);
current_context = ctx;
/* Don't allow an interrupt and thus potentially another
* trap to be invoked while we hold the above mutex.
* This is probably just being paranoid. */
regs.intmask = 7;
/* Set up function call address. */
ctx->call68k_func_addr = func_addr;
/* Set PC to address of 68k call trap, so that it will be
* executed when emulator context resumes. */
m68k_setpc(m68k_call_trapaddr);
fill_prefetch();
/* Switch to emulator context. */
uae_sem_post(&ctx->switch_to_emu_sem);
/* Wait for 68k call return handler to switch back to us. */
uae_sem_wait(&ctx->switch_to_trap_sem);
/* End critical section. */
uae_sem_post(&trap_mutex);
/* Get return value from 68k function called. */
return ctx->call68k_retval;
}
}
/*
* Handles the emulator's side of a 68k call (from an extended trap)
*/
static uae_u32 REGPARAM2 m68k_call_handler(TrapContext *dummy_ctx)
{
TrapContext *context = current_context;
uae_u32 sp;
sp = m68k_areg(regs, 7);
/* Push address of trap context on 68k stack. This is
* so the return trap can find this context. */
sp -= sizeof(void *);
put_pointer(sp, context);
/* Push addr to return handler trap on 68k stack.
* When the called m68k function does an RTS, the CPU will pull this
* address off the stack and so call the return handler. */
sp -= 4;
put_long(sp, m68k_return_trapaddr);
m68k_areg(regs, 7) = sp;
/* Set PC to address of 68k function to call. */
m68k_setpc(context->call68k_func_addr);
fill_prefetch();
/* End critical section: allow other traps run. */
uae_sem_post(&trap_mutex);
/* Restore interrupts. */
regs.intmask = context->saved_regs.intmask;
/* Dummy return value. */
return 0;
}
/*
* Handles the return from a 68k call at the emulator's side.
*/
static uae_u32 REGPARAM2 m68k_return_handler(TrapContext *dummy_ctx)
{
TrapContext *context;
uae_u32 sp;
/* One trap returning at a time, please! */
uae_sem_wait(&trap_mutex);
/* Get trap context from 68k stack. */
sp = m68k_areg(regs, 7);
context = (TrapContext *)get_pointer(sp);
sp += sizeof(void *);
m68k_areg(regs, 7) = sp;
/* Get return value from the 68k call. */
context->call68k_retval = m68k_dreg(regs, 0);
/* Switch back to trap context. */
uae_sem_post(&context->switch_to_trap_sem);
/* Wait for trap context to switch back to us.
*
* It'll do this when the trap handler is done - or when
* the handler wants to call another 68k function. */
uae_sem_wait(&context->switch_to_emu_sem);
/* Dummy return value. */
return 0;
}
/*
* Handles completion of an extended trap and passes
* return value from trap function to 68k space.
*/
static uae_u32 REGPARAM2 exit_trap_handler(TrapContext *dummy_ctx)
{
TrapContext *context = current_context;
/* Wait for trap context thread to exit. */
uae_wait_thread(context->thread);
/* Restore 68k state saved at trap entry. */
//regs = context->saved_regs;
copyfromcpucontext(&context->saved_regs, context->saved_regs.pc);
/* If trap is supposed to return a value, then store
* return value in D0. */
if (context->trap_has_retval)
m68k_dreg(regs, 0) = context->trap_retval;
uae_sem_destroy(&context->switch_to_trap_sem);
uae_sem_destroy(&context->switch_to_emu_sem);
xfree(context);
/* End critical section */
uae_sem_post(&trap_mutex);
/* Dummy return value. */
return 0;
}
/*
* Call a 68k library function from extended trap.
*/
uae_u32 CallLib(TrapContext *ctx, uaecptr base, uae_s16 offset)
{
uae_u32 retval;
uaecptr olda6 = trap_get_areg(ctx, 6);
trap_set_areg(ctx, 6, base);
retval = trap_Call68k(ctx, base + offset);
trap_set_areg(ctx, 6, olda6);
return retval;
}
/*
* Call 68k function from extended trap.
*/
uae_u32 CallFunc(TrapContext *ctx, uaecptr func)
{
return trap_Call68k(ctx, func);
}
/* UAE board traps */
#define TRAP_THREADS (RTAREA_TRAP_DATA_NUM + RTAREA_TRAP_DATA_SEND_NUM)
@ -585,212 +795,6 @@ TrapContext *alloc_host_thread_trap_context(void)
}
}
/*
* Set up extended trap context and call handler function
*/
static void trap_HandleExtendedTrap (TrapHandler handler_func, int has_retval)
{
struct TrapContext *context = xcalloc (TrapContext, 1);
if (context) {
uae_sem_init (&context->switch_to_trap_sem, 0, 0);
uae_sem_init (&context->switch_to_emu_sem, 0, 0);
context->trap_handler = handler_func;
context->trap_has_retval = has_retval;
//context->saved_regs = regs;
copytocpucontext (&context->saved_regs);
/* Start thread to handle new trap context. */
uae_start_thread_fast (trap_thread, (void *)context, &context->thread);
/* Switch to trap context to begin execution of
* trap handler function.
*/
uae_sem_post (&context->switch_to_trap_sem);
/* Wait for trap context to switch back to us.
*
* It'll do this when the trap handler is done - or when
* the handler wants to call 68k code. */
uae_sem_wait (&context->switch_to_emu_sem);
}
}
/*
* Call m68k function from an extended trap handler
*
* This function is to be called from the trap context.
*/
static uae_u32 trap_Call68k(TrapContext *ctx, uaecptr func_addr)
{
if (ctx->host_trap_data) {
return call_hardware_trap_back(ctx, 10, func_addr, 0, 0, 0);
} else {
/* Enter critical section - only one trap at a time, please! */
uae_sem_wait (&trap_mutex);
current_context = ctx;
/* Don't allow an interrupt and thus potentially another
* trap to be invoked while we hold the above mutex.
* This is probably just being paranoid. */
regs.intmask = 7;
/* Set up function call address. */
ctx->call68k_func_addr = func_addr;
/* Set PC to address of 68k call trap, so that it will be
* executed when emulator context resumes. */
m68k_setpc (m68k_call_trapaddr);
fill_prefetch ();
/* Switch to emulator context. */
uae_sem_post (&ctx->switch_to_emu_sem);
/* Wait for 68k call return handler to switch back to us. */
uae_sem_wait (&ctx->switch_to_trap_sem);
/* End critical section. */
uae_sem_post (&trap_mutex);
/* Get return value from 68k function called. */
return ctx->call68k_retval;
}
}
/*
* Handles the emulator's side of a 68k call (from an extended trap)
*/
static uae_u32 REGPARAM2 m68k_call_handler (TrapContext *dummy_ctx)
{
TrapContext *context = current_context;
uae_u32 sp;
sp = m68k_areg (regs, 7);
/* Push address of trap context on 68k stack. This is
* so the return trap can find this context. */
sp -= sizeof (void *);
put_pointer (sp, context);
/* Push addr to return handler trap on 68k stack.
* When the called m68k function does an RTS, the CPU will pull this
* address off the stack and so call the return handler. */
sp -= 4;
put_long (sp, m68k_return_trapaddr);
m68k_areg (regs, 7) = sp;
/* Set PC to address of 68k function to call. */
m68k_setpc (context->call68k_func_addr);
fill_prefetch ();
/* End critical section: allow other traps run. */
uae_sem_post (&trap_mutex);
/* Restore interrupts. */
regs.intmask = context->saved_regs.intmask;
/* Dummy return value. */
return 0;
}
/*
* Handles the return from a 68k call at the emulator's side.
*/
static uae_u32 REGPARAM2 m68k_return_handler (TrapContext *dummy_ctx)
{
TrapContext *context;
uae_u32 sp;
/* One trap returning at a time, please! */
uae_sem_wait (&trap_mutex);
/* Get trap context from 68k stack. */
sp = m68k_areg (regs, 7);
context = (TrapContext *)get_pointer (sp);
sp += sizeof (void *);
m68k_areg (regs, 7) = sp;
/* Get return value from the 68k call. */
context->call68k_retval = m68k_dreg (regs, 0);
/* Switch back to trap context. */
uae_sem_post (&context->switch_to_trap_sem);
/* Wait for trap context to switch back to us.
*
* It'll do this when the trap handler is done - or when
* the handler wants to call another 68k function. */
uae_sem_wait (&context->switch_to_emu_sem);
/* Dummy return value. */
return 0;
}
/*
* Handles completion of an extended trap and passes
* return value from trap function to 68k space.
*/
static uae_u32 REGPARAM2 exit_trap_handler (TrapContext *dummy_ctx)
{
TrapContext *context = current_context;
/* Wait for trap context thread to exit. */
uae_wait_thread (context->thread);
/* Restore 68k state saved at trap entry. */
//regs = context->saved_regs;
copyfromcpucontext (&context->saved_regs, context->saved_regs.pc);
/* If trap is supposed to return a value, then store
* return value in D0. */
if (context->trap_has_retval)
m68k_dreg (regs, 0) = context->trap_retval;
uae_sem_destroy (&context->switch_to_trap_sem);
uae_sem_destroy (&context->switch_to_emu_sem);
xfree (context);
/* End critical section */
uae_sem_post (&trap_mutex);
/* Dummy return value. */
return 0;
}
/*
* Call a 68k library function from extended trap.
*/
uae_u32 CallLib(TrapContext *ctx, uaecptr base, uae_s16 offset)
{
uae_u32 retval;
uaecptr olda6 = trap_get_areg(ctx, 6);
trap_set_areg(ctx, 6, base);
retval = trap_Call68k(ctx, base + offset);
trap_set_areg(ctx, 6, olda6);
return retval;
}
/*
* Call 68k function from extended trap.
*/
uae_u32 CallFunc(TrapContext *ctx, uaecptr func)
{
return trap_Call68k(ctx, func);
}
/*
* Initialize trap mechanism.
*/